java - 使用目的 ?泛型中的 super T 或 T super SomeClass

标签 java generics inheritance

我想了解使用 <? super T> 的目的是什么在 Java 的泛型中。看了很多,还没看懂。显然我使用 <T extends SomeClass> ,如果类是 SomeClass 或 SomeClass 的子类,我们现在不需要确切的子类类型,我们只知道它有父类(super class)的方法 SomeClass , 所以我们可以调用类似 T.someMethod(); 的方法这是一个非常强大的功能。但我无法理解使用 <T super SomeClass> 的目的.

写这样的通配符我们有什么特权? T是SomeClass的父类,那么什么Super类可能没有SomeClass的方法,我们只能保证SomeClass的父类有Object的所有方法,这样就没用了,用这个有什么用?

最佳答案

您可以使用 ? super T 表示下界通配符.假设您想开发一种可以将 Double 放入列表的方法。

public void foo(List<Double> d) {}

但是如果你可以像这样声明这个方法

public void foo(List<? super Double> d) {}

那你可以传List<Double> , List<Number>, and List<Object> .因此,您获得了更大的灵 active 和可重用性。还有其他查看方式 ? super T是通过PUT原则

use a super wildcard when you only put values into a structure.

关于java - 使用目的 ?泛型中的 super T 或 T super SomeClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25926518/

相关文章:

c# - 在不指定类型的情况下调用静态泛型类中的方法

c++ - 重写采用继承结构的函数

java - 无法将 Java 中提供程序的标签名称发送到 Pact Broker

java - Java中合并两个多维字符串数组

java - 使用 Microsoft JDBC 驱动程序受 SELECT INTO 查询影响的行数

java - 合并包含集合的映射会抛出 UnsupportedOperationException

java - 泛型参数扩展了 java 方法的另一个参数

c# - 从泛型类型调用静态方法

java IS-A关系考试题混淆

c++ - 为什么在编译时选择这个虚方法的实现?