当前位置:  开发笔记 > 编程语言 > 正文

有什么区别?Java泛型中的对象和对象?

如何解决《有什么区别?Java泛型中的对象和对象?》经验,为你挑选了3个好方法。

我正在使用Eclipse来帮助我清理一些代码以正确使用Java泛型.大多数情况下,它在推断类型方面做得非常出色,但在某些情况下,推断类型必须尽可能通用:对象.但Eclipse似乎给了我一种选择在一种Object和一种'?'之间的选择.

那么有什么区别:

HashMap hash1;

HashMap hash2;

Johannes Wei.. 135

HashMap匹配的实例Map但不是Map.假设你想编写一个接受从Strings到任何东西的地图的方法:如果你愿意的话

public void foobar(Map ms) {
    ...
}

你不能提供HashMap.如果你写

public void foobar(Map ms) {
    ...
}

有用!

在Java的泛型中有时会被误解的一点是,List它不是一个子类型List.(但String[]实际上是一个子类型Object[],这是泛型和数组混合不好的原因之一.(Java中的数组是协变的,泛型不是,它们是不变的)).

示例:如果您想编写一个接受法ListInputStreamS和亚型InputStream,你会写

public void foobar(List ms) {
    ...
}

顺便说一下:当你想要理解Java中不那么简单的东西时,Joshua Bloch的Effective Java是一个很好的资源.(上面的问题在本书中也很清楚.)



1> Johannes Wei..:

HashMap匹配的实例Map但不是Map.假设你想编写一个接受从Strings到任何东西的地图的方法:如果你愿意的话

public void foobar(Map ms) {
    ...
}

你不能提供HashMap.如果你写

public void foobar(Map ms) {
    ...
}

有用!

在Java的泛型中有时会被误解的一点是,List它不是一个子类型List.(但String[]实际上是一个子类型Object[],这是泛型和数组混合不好的原因之一.(Java中的数组是协变的,泛型不是,它们是不变的)).

示例:如果您想编写一个接受法ListInputStreamS和亚型InputStream,你会写

public void foobar(List ms) {
    ...
}

顺便说一下:当你想要理解Java中不那么简单的东西时,Joshua Bloch的Effective Java是一个很好的资源.(上面的问题在本书中也很清楚.)



2> Julien Chast..:

另一种思考这个问题的方法是

HashMap hash1;

相当于

HashMap hash1;

将这些知识与Java Generics and Collections的第(2.4)节中的"获取和放置原则"结合起来:

获取和放置原则:当您只从结构中获取值时使用扩展通配符,当您仅将值放入结构时使用超级通配符,并且当您同时获取和放置时不使用通配符.

希望,外卡可能会开始变得更有意义.


感谢您提供更多信息.我还在消化它.:)

3> topchef..:

如果你记得它Collection只是一个包含类型对象的泛型集合Object,但它Collection是所有类型集合的超类型,这很容易理解.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有