我在不同的地方看到建议,在使用集合或列表或哈希时将它们声明为接口(interface),然后在实例化时使用您想要的特定结构。
例如:
Map<K,V> map;
...
map = new LinkedHashMap<K,V>();
或
List<K> list;
...
list = new ArrayList<K>();
我的问题是,Java 是否在某处“存储实现细节”。 我问的原因是我有一个使用 HashMap 的类。因此,我将其成员声明为 Map,并在初始化它时,基于一些额外的变量,我将其初始化为具有一定大小的 HashMap。我也有一个 setter/getter 。
现在在另一个类中,我可以访问该类,因此当我需要 map 时,我只需调用 getter 并获取它。所以我将它转换为 HashMap。
HashMap<K,V> hashMap = (HashMap) class.getMap();
for(Map.Entry<K,V> entry : hashMap.entrySet())
...
它记得它是什么吗?如果我认为顺序对我很重要并将其更改为使用 LinkedHashMap,它仍然会按照 FIFO 顺序进行迭代。如果每次在项目的其他部分使用该类时都必须将其转换为某个结构,那么在使用时声明它不是更好吗?
最佳答案
您不必转换为 HashMap。
这有效:
for (Map.Entry<K,V> entry : class.getMap().entrySet ())
关于java - 当将数据结构声明为其接口(interface)然后对其进行强制转换时,Java 是否将详细信息存储在某处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28883715/