为什么

public interface ArrayOfONEITEMInterface <T extends ONEITEMInterface>{
    public List<T> getONEITEM();
}

编译,但不编译
public interface ArrayOfONEITEMInterface <? extends ONEITEMInterface>{
    public List<?> getONEITEM();
}

之间有什么区别?和T在类和方法签名中?

最佳答案

?是通配符,表示ONEITEMInterface的所有子类,包括其自身。

在这种情况下,TONEITEMInterface特定实现。

由于?是通配符,因此类声明中的?与方法声明中的?之间没有关系,因此不会编译。只是List<?> getONEITEM();会编译。

第一个场景意味着整个类可以精确地处理每个实例一种类型的Bar

interface Foo<T extends Bar> {
     List<T> get();
}

第二种情况允许每个实例对Bar的任何子类型的操作
interface Foo {
     List<? extends Bar> get()
}

10-08 04:49