java - 和有什么区别?和 T 在类和方法签名中?

标签 java generics

为什么

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

编译,但不编译

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

和有什么不一样?和 T 在类和方法签名中?

最佳答案

?是一个通配符,表示ONEITEMInterface任何 子类包括它自己。

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

?是通配符,你的?之间没有关系在类声明和 ? 中在你的方法声明中,因此它不会编译。就List<?> getONEITEM();虽然会编译。


第一种情况意味着整个类(class)只能处理一种类型的Bar每个实例

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

第二种情况 允许每个实例Bar任何 子类型进行操作

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

关于java - 和有什么区别?和 T 在类和方法签名中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7573269/

相关文章:

java - 为什么 ExpectedException 在 Spring 中被弃用

java - 将单个参数而不是列表传递给 ItemWriter 接口(interface)的 Write() 方法

swift - 如何在 Swift 泛型 where 子句中添加 OR 条件?

java - 使用泛型的观察者模式过于泛型

java - 无法构造泛型类型参数,该怎么办?

c# - LINQ- 组合多个 List<T> 并按值排序 (.Net 3.5)

java - 在 JSP 中使用 try 语句时出现输出问题

java - 从基本类型到对象的隐式转换

java - 从mapstruct收到错误 "Several possible source properties for target property"时如何避免显式映射?

java - 具有类型混淆的自定义 Java 迭代器