也许这是一个愚蠢的问题:让我说我有
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
内的类型。
我的问题是:我应该使用<?>
某个地方还是可以跳过它?有什么区别?
答案 0 :(得分:1)
如果您使用List<Wrapper<?>>
,您将能够从列表中获取对象,但您将无法添加新项目。通配符基本上与不同于任何其他类型的类型相对应,包括其他通配符。
如果您使用List<Wrapper>
,您将能够同时获取列表项并添加新列表项,但现在由您自己负责防范不正确的类型转换。