Java泛型:<! - ? - >和跳过它有什么区别?

时间:2014-03-19 11:01:23

标签: java generics

也许这是一个愚蠢的问题:让我说我有

abstract class A<T> {
  List<Wrapper<T>> doStuff()
}

我有class B extends A<String>class C extends A<Integer>

现在我想:

List<A> aces = list with instances of B and C;

List<Wrapper> wrapperedItems = flattened list of lists returned from doStuff() on all items in aces

此时我并不关心Wrapper内的类型。 我的问题是:我应该使用<?>某个地方还是可以跳过它?有什么区别?

1 个答案:

答案 0 :(得分:1)

如果您使用List<Wrapper<?>>,您将能够从列表中获取对象,但您将无法添加新项目。通配符基本上与不同于任何其他类型的类型相对应,包括其他通配符。

如果您使用List<Wrapper>,您将能够同时获取列表项并添加新列表项,但现在由您自己负责防范不正确的类型转换。