Java 定义地图、集合等,然后传递/获取它们
我已经了解到,当您定义Java 定义地图、集合等,然后传递/获取它们,java,map,pass-by-reference,Java,Map,Pass By Reference,我已经了解到,当您定义{Map,Set,Etc}时,最好使用接口名称: Map<Integer, String> map = new LinkedHashMap<Integer, String>(); 现在我遇到了我的第一个僵局。我不能返回LinkedHashMap,我必须返回Map。 所以在另一节课上,我得到了Map class Foo{ public Foo{ Data data = new Data(); Map<I
{Map,Set,Etc}
时,最好使用接口
名称:
Map<Integer, String> map = new LinkedHashMap<Integer, String>();
现在我遇到了我的第一个僵局。我不能返回LinkedHashMap
,我必须返回Map
。
所以在另一节课上,我得到了Map
class Foo{
public Foo{
Data data = new Data();
Map<Integer, String> map = data.getMap();
}
}
class-Foo{
公共食品{
数据=新数据();
Map Map=data.getMap();
}
}
map
通过时发生了什么吗?LinkedHashMap
?getData()
之后,我在Map
中放入了一些东西,那么Map
的顺序会发生什么变化?我绘制地图的方法是无知的吗?
map
公开吗
现在我遇到了我的第一个僵局。我无法返回LinkedHashMap
这里有一个误解:可以返回一个LinkedHashMap
,因为LinkedHashMap
是一个Map
,一种特殊的Map
,但无论如何都是一个Map
有人能解释一下地图通过后发生了什么吗
当它被传递时,它被视为任何映射
,就像incognito一样,但它保持不变
它还是一张LinkedHashMap吗
对
数据是否发生了变化
没有
如果在调用getData()之后,我在映射中放入了一些东西,那么映射的顺序会发生什么变化
这是另一个话题
为什么我不能/不应该在第二个代码段中定义映射
您不需要这样做,因为LinkedHashMap
是一个Map
(另一方面,Map
不一定是LinkedHashMap
)
我画地图的方法是无知的吗?
我应该把地图公之于众吗
否。您可能希望您的变量能够执行它需要执行的操作,并且在执行方式上尽可能灵活。因此,变量的类型应该涵盖所有需要的功能,但在hirachy中应尽可能高 对象是一种数据结构。那个数据结构不会改变,不管是铸造还是引用分配。我会的。第52项:按对象的名称引用对象interfaces@BoristheSpider谢谢,我将彻底阅读这篇文章。Eclipse对我犹豫不决:“类型不匹配:无法从映射转换到LinkedHashMap”。我可以把它放到LinkedHashMap上。。但这仍然让我摸不着头脑,为什么我会将它定义为
Map
,而不是LinkedHashMap
@模式,这毫无意义。您确定此错误发生在getMap()
中,或者在使用getMap()
的其他一些代码中吗?它在getMap()中。Eclipse在这一行中强调对象map
:returnmap代码>并给出该错误public LinkedHashMap getMap(){return map;}
@patterned方法的返回类型和返回值的类型之间存在差异。如果map
的类型为LinkedHashMap
,则可以将其用作返回类型为map
的方法的返回值。但是,如果map
类型为map
,则不能将其用于返回类型为LinkedHashMap
@模式的方法。关于接口的全部要点是,在使用实现对象时,不需要知道具体的实现。这就是多态性的意义所在!您的类可以使用它喜欢的任何Map
实现:HashMap
,LinkedHashMap
,TreeMap
,。。。只需在getMap()
中将其作为Map
返回即可。每当有人调用Map
方法(例如getMap().put(5,“foo”)
)时,它将被分派到实际实现中。认真地
class Data{
private Map<Integer, String> map;
public Data(){
map = new LinkedHashMap<Integer, String>();
//dynamically put some things into the map
}
public Map<Integer, String> getMap(){
return map;
}
}
class Foo{
public Foo{
Data data = new Data();
Map<Integer, String> map = data.getMap();
}
}