숫자 유형 및 문자열 유형에 대해 작동하는 일반 메소드를 작성하려고합니다. 이와 같은 한정된 형식을 갖는 방법이 있습니까?여러 가지 유형에 대한 자바 경계 제네릭 타입 정의
<T extends Number || String> void print(){...}
고마워요.
숫자 유형 및 문자열 유형에 대해 작동하는 일반 메소드를 작성하려고합니다. 이와 같은 한정된 형식을 갖는 방법이 있습니까?여러 가지 유형에 대한 자바 경계 제네릭 타입 정의
<T extends Number || String> void print(){...}
고마워요.
아니요. 유형 정의가 "여러 유형"에 대해 선언 될 수있는 유일한 방법은 해당 유형이 상속 계층 구조에서 공통 조상을 공유하거나 동일한 인터페이스를 구현하는 경우입니다. Number
과 String
은 모두 Object
이며 Serializable
을 구현합니다.하지만 공통점은 같습니다.
게다가, 귀하의 예에서는 제네릭 형식의 사용이 무엇입니까? 메서드는 매개 변수를받지 못하고 아무 것도 반환하지 않습니다. 아마 당신은이처럼 print
방법에 과부하가 더 낫다 :
void print(String s) {}
void print(Number n) {}
여기서 도움이되지는 않지만, 실제로는 타입 파라미터에서 원하는만큼의 인터페이스를 선언 할 수 있습니다 :'T extends ClassFoo & InterfaceA & InterfaceB'. 이 경우,'T'는 ClassFoo, InterfaceA * 및 * InterfaceB의 부속 유형이어야하며 ClassFoo가 삭제됩니다. – yshavit
더 나은 솔루션이 오버로드 된 메서드를하는 것입니다 :이 도움이
T void print(<T extends Number> number) {}
void print(String s) {}
희망을.
정말 고마워! 나는 이것에 대해 생각해 보았고 같은 방법을 두 번 쓰고 싶지는 않았다.) –
@HelenHambaryan, 천만에! – Egor
방금 메소드 다형성을 사용할 수 있습니까? – artbristol