我已经读过,当您定义{Map, Set, Etc}
时,最好使用interface
名称:
Map<Integer, String> map = new LinkedHashMap<Integer, String>();
而不是:
LinkedHashMap<Integer, String> map = new LinkedHashMap<Integer, String>();
我不确定为什么会这样,但我已经把它付诸实践,希望我以后会理解。也许那个时候到了。
所以我创建了一个定义一个类并为Map
创建一个getter的类:
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;
}
}
现在我陷入了第一次僵局。我无法返回LinkedHashMap
,我必须返回Map
。
所以在另一个课程中,我得到了Map
class Foo{
public Foo{
Data data = new Data();
Map<Integer, String> map = data.getMap();
}
}
map
传递给我的情况吗?
LinkedHashMap
吗?
Map
如果在致电getData()
后,我在Map
中添加了某些内容,那么map
的顺序会怎样?
答案 0 :(得分:1)
现在我陷入了第一次僵局。我无法返回LinkedHashMap
以下是误解:您可以返回LinkedHashMap
,因为LinkedHashMap
是Map
,这是一种特殊的Map
,但无论如何都是Map
。
有人可以解释传递时要映射的内容吗?
当它通过时,它被视为任何Map
,如隐身,但它保持不变。
它仍然是LinkedHashMap吗?
是
数据是否发生了变化?
没有
如果在调用getData()后,我在地图中添加了一些内容,那么Map的顺序会怎样?
这是另一个话题。
为什么不能/不应该像第二个代码片段中那样定义Map?
您无需这样做,因为LinkedHashMap
是 Map
(另一方面,Map
不一定是{{1} }})。
我的方法是无知地完成地图吗? 我应该公开地图吗?
没有
答案 1 :(得分:0)
您可能希望您的变量能够执行它需要做的事情,并且仍然尽可能灵活地执行它。因此,您的变量应该是涵盖所有所需功能的类型,但在hirachy中应尽可能高。