有什么区别?Java泛型中的对象和对象?
我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型。大多数时候,它在推断类型方面做得非常出色,但是在某些情况下,推断类型必须尽可能地通用:对象。但是Eclipse似乎给了我一个选择,可以选择对象类型还是“?”类型。
那么之间有什么区别:
HashMap<String, ?> hash1;
和
HashMap<String, Object> hash2;
回答:
HashMap<String, String>
匹配项的实例,Map<String, ?>
但不是Map<String, Object>
。假设你要编写一个接受Strings
到任何内容的映射的方法:如果你要编写
public void foobar(Map<String, Object> ms) { ...
}
你无法提供HashMap<String, String>
。如果你写
public void foobar(Map<String, ?> ms) { ...
}
有用!
在Java泛型中有时会被误解的一件事是它List<String>
不是的子类型List<Object>
。(但String[]
实际上是的子类型Object[]
,这是泛型和数组不能很好混合的原因之一。(Java中的数组是协变的,泛型不是,它们是不变的))。
示例:如果你想编写一个接受List
的的的InputStreams
和的子类型的方法InputStream,则可以编写
public void foobar(List<? extends InputStream> ms) { ...
}
以上是 有什么区别?Java泛型中的对象和对象? 的全部内容, 来源链接: utcz.com/qa/415574.html