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中不那么简单的内容时,Joshua Bloch的Effective Java是很好的资源。(您的上述问题也在书中很好地涵盖了。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)