java - 当将数据结构声明为其接口(interface)然后对其进行强制转换时,Java 是否将详细信息存储在某处

标签 java interface

我在不同的地方看到建议,在使用集合或列表或哈希时将它们声明为接口(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/

相关文章:

java - 如何更改 Java 应用程序进程的名称?

java - 这种语法格式对 Java 来说正常吗?

java - 无法理解在 IntStream 上使用 collect()

java - Kinvey:离线时从 AppData 获取最近保存的实体?

typescript - 动态键,它包含 typescript 中特定字符串和迭代整数的串联

php - 强制实现接口(interface)的类定义常量

java - 是否可以在 android 推送通知中添加视频?

c# - 是否实现两个接口(interface)?

c++ - c++-通过抽象模板基类接口(interface)指针访问派生类方法,而接口(interface)中没有显式类型

java - 接口(interface)如何执行操作