我想了解使用 <? 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/