使用目的?泛型中的超级T或T超级SomeClass

时间:2014-09-19 04:43:56

标签: java generics inheritance

我试图了解在Java中使用<? super T>在泛型中的目的是什么。我已经阅读了很多,但还没有理解它。显然对我来说使用<T extends SomeClass>,如果类是SomeClass或SomeClass的子类,我们现在不需要确切类型的子类,我们只知道它有超类SomeClass的方法,所以我们可以调用像T.someMethod();这样的方法这是非常强大的功能。但我无法理解使用<T super SomeClass>的目的。

我们写了这样的通配符有什么特权? T是SomeClass的超类,所以Super类可能没有SomeClass的方法,我们只能确保SomeClass的超类具有Object的所有方法,所以这变得无用,那么使用它的目的是什么?

1 个答案:

答案 0 :(得分:1)

您可以使用? super T表达下限通配符。假设您要开发一个可以将Double放入列表的方法。

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

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

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

然后您可以传递List<Double>List<Number>, and List<Object>。因此,您获得了更多的灵活性和可重用性。查看? super T的另一种方法是通过 PUT原则

  

仅在将值放入结构时使用超级通配符。