定义地图,集等,然后传递/获取它们

时间:2014-01-14 15:53:37

标签: java map pass-by-reference

我已经读过,当您定义{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的顺序会怎样?
  • 为什么不能/不应该像第二个代码片段中那样定义Map?
    我的方法是无知地完成地图吗?
  • 我应该公开{{1}}吗?

  • 2 个答案:

    答案 0 :(得分:1)

      

    现在我陷入了第一次僵局。我无法返回LinkedHashMap

    以下是误解:您可以返回LinkedHashMap,因为LinkedHashMap Map,这是一种特殊的Map,但无论如何都是Map

      

    有人可以解释传递时要映射的内容吗?

    当它通过时,它被视为任何Map,如隐身,但它保持不变。

      

    它仍然是LinkedHashMap吗?

      

    数据是否发生了变化?

    没有

      

    如果在调用getData()后,我在地图中添加了一些内容,那么Map的顺序会怎样?

    这是另一个话题。

      

    为什么不能/不应该像第二个代码片段中那样定义Map?

    您无需这样做,因为LinkedHashMap Map(另一方面,Map不一定是{{1} }})。

      

    我的方法是无知地完成地图吗?   我应该公开地图吗?

    没有

    答案 1 :(得分:0)

    您可能希望您的变量能够执行它需要做的事情,并且仍然尽可能灵活地执行它。因此,您的变量应该是涵盖所有所需功能的类型,但在hirachy中应尽可能高。