在泛型中使用? super T或T super SomeClass的目的是什么?

3
我正在尝试理解在Java的泛型中使用<? super T>的目的。我已经阅读了很多资料,但还没有完全理解。显然,如果类是SomeClass或SomeClass的子类,则使用<T extends SomeClass>可以省略子类的确切类型,我们只知道它具有超类SomeClass的方法,因此我们可以调用T.someMethod();这是一个非常强大的功能。但我不明白为什么要使用<T super SomeClass>
撰写此类通配符有什么优势?T是SomeClass的超类,因此超类可能没有SomeClass的方法,我们只能确保SomeClass的超类具有Object的所有方法,所以这变得毫无意义,那么使用此操作的目的是什么呢?

1
你读过这个吗:https://dev59.com/7nE85IYBdhLWcg3wikK- - assylias
1个回答

2
您可以使用? super T表达下限通配符。比如说,您想要开发一个能够将 Double 放入列表中的方法。
public void foo(List<Double> d) {}

但是,如果您能像这样声明此方法
public void foo(List<? super Double> d) {}

然后您可以传递 List<Double>List<Number>List<Object>。因此,您实现了更高的灵活性和可重用性。另外一种理解 ? super T 的方式是通过 PUT 原则

当您只向结构中放入值时,请使用超级通配符。


谢谢回答,但是List<String>和List<Object>不兼容。我不能把Object放在List<String>中。 - user3991417
显然这就是为什么我提到了“你可以传递”,我没有提到你可以放置。 - sol4me

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接