답변:
실제로 원하는 것을 할 수 있습니다 . 여러 인터페이스 또는 클래스와 인터페이스를 제공하려면 와일드 카드를 다음과 같이 보여야합니다.
<T extends ClassA & InterfaceB>
페이지 하단의 sun.com 의 Generics Tutorial , 특히 Bounded Type Parameters 섹션을 참조하십시오. 원하는 & InterfaceName
각 인터페이스를 사용하여 원하는 경우 실제로 둘 이상의 인터페이스를 나열 할 수 있습니다 .
이것은 임의로 복잡해질 수 있습니다. 시연하려면 다음의 JavaDoc 선언을 참조하십시오 Collections#max
.
public static <T extends Object & Comparable<? super T>> T
max(Collection<? extends T> coll)
왜 그렇게 복잡한가? Java Generics FAQ : 바이너리 호환성 유지 .
변수 선언에서는 작동하지 않는 것처럼 보이지만 클래스에 일반적인 경계를 설정하면 작동합니다. 따라서 원하는 작업을 수행하려면 몇 개의 농구대를 뛰어 넘어야 할 수도 있습니다. 그러나 당신은 할 수 있습니다. 클래스에 일반적인 경계를두고 다음과 같이 할 수 있습니다.
class classB { }
interface interfaceC { }
public class MyClass<T extends classB & interfaceC> {
Class<T> variable;
}
얻을 variable
것을 당신이 원하는 것을 제한이있다. 자세한 정보 및 예 는 Java 5.0 의 Generics 3 페이지를 참조하십시오 . 참고에 <T extends B & C>
, 클래스 이름이 먼저 와야하고, 인터페이스은 다음과 같습니다. 물론 단일 클래스 만 나열 할 수 있습니다.
?
그래서 정말 "와일드 카드"입니다, 그 표현에? 타입 매개 변수가 실제로 와일드 카드 일 때 전체 "한 번에 두 가지를 연장"개념을 사용할 수 없기 때문에 묻습니다.
"익명"유형 매개 변수 (예 :)를 사용하는 와일드 카드로 ?
수행 할 수 없지만 "명명 된"유형 매개 변수로 수행 할 수 있습니다. 메서드 또는 클래스 수준에서 형식 매개 변수를 선언하면됩니다.
import java.util.List;
interface A{}
interface B{}
public class Test<E extends B & A, T extends List<E>> {
T t;
}