为什么
public interface ArrayOfONEITEMInterface <T extends ONEITEMInterface>{
public List<T> getONEITEM();
}
编译,但不编译
public interface ArrayOfONEITEMInterface <? extends ONEITEMInterface>{
public List<?> getONEITEM();
}
之间有什么区别?和T在类和方法签名中?
最佳答案
?
是通配符,表示是ONEITEMInterface
的所有子类,包括其自身。
在这种情况下,T
是ONEITEMInterface
的特定实现。
由于?
是通配符,因此类声明中的?
与方法声明中的?
之间没有关系,因此不会编译。只是List<?> getONEITEM();
会编译。
第一个场景意味着整个类可以精确地处理每个实例一种类型的Bar
。
interface Foo<T extends Bar> {
List<T> get();
}
第二种情况允许每个实例对
Bar
的任何子类型的操作interface Foo {
List<? extends Bar> get()
}