泛型类型参数之间有什么区别?和对象



例如,这两个方法签名之间有什么区别吗?

Something<?> doIt(Collection<?> collection)

Something<Object> doIt(Colllection<Object> collection)

是的,有。这适用于?,但不适用于Object:

List<Foo> fooList = new List<>()
doIt(fooList)

原因是即使FooObject,List<Foo>也是而不是List<Object>。为什么?假设我们有一个与Foo无关的类Bar,我们这样写doIt:

void doIt(Collection<Object> collection) {
collection.add(new Bar())
}

现在,如果允许调用doIt(fooList),我们最终会得到包含BarList<Foo>!

相关内容

  • 没有找到相关文章

最新更新