初始化地图、列表等
Initializing maps, lists, etc
下列哪项是正确的:
Map<K,V> map = new HashMap<>();
或
HashMap<K,V> map = new HashMap<>();
甚至:
List<T> list = new ArrayList<>();
ArrayList<T> list = new ArrayList();
我很好奇是否有正确的方法,或者这只是一个偏好问题。我想知道这可能是愚蠢的,但我不确定。
如果可能的话(所以除非你正在为集合或其他东西的特定实现编写一些实用程序代码),你想要使用接口,即
List<String> list = new ArrayList<>();
这样一来,如果以后有需要,就可以更轻松地切换实现,例如移动到 LinkedList。
这样做的好处
Map map = new HashMap<>();
是您的代码不依赖于 HashMap
及其 API 的实现。
如果您稍后决定用 HashMap
替换 Map
接口的另一个实现,例如 EnumMap
,那么您的代码中唯一改变的部分就是那一行。
Map map = new EnumMap<>();
你有没有做过类似的事情
HashMap map = new HashMap<>();
然后决定从 HashMap
更改为 EnumMap
,您必须:
1) 遍历所有代码并将 HashMap
的每个实例更改为 EnumMap
.
2) 如果您依赖 HashMap
而不是 EnumMap
中存在的功能,则完全重新设计您的代码。也就是说,如果您依赖 Map
不支持的 API,那么如果不对您的代码进行额外修改,您就无法轻松地从一种类型更改为另一种类型。
下列哪项是正确的:
Map<K,V> map = new HashMap<>();
或
HashMap<K,V> map = new HashMap<>();
甚至:
List<T> list = new ArrayList<>();
ArrayList<T> list = new ArrayList();
我很好奇是否有正确的方法,或者这只是一个偏好问题。我想知道这可能是愚蠢的,但我不确定。
如果可能的话(所以除非你正在为集合或其他东西的特定实现编写一些实用程序代码),你想要使用接口,即
List<String> list = new ArrayList<>();
这样一来,如果以后有需要,就可以更轻松地切换实现,例如移动到 LinkedList。
这样做的好处
Map map = new HashMap<>();
是您的代码不依赖于 HashMap
及其 API 的实现。
如果您稍后决定用 HashMap
替换 Map
接口的另一个实现,例如 EnumMap
,那么您的代码中唯一改变的部分就是那一行。
Map map = new EnumMap<>();
你有没有做过类似的事情
HashMap map = new HashMap<>();
然后决定从 HashMap
更改为 EnumMap
,您必须:
1) 遍历所有代码并将 HashMap
的每个实例更改为 EnumMap
.
2) 如果您依赖 HashMap
而不是 EnumMap
中存在的功能,则完全重新设计您的代码。也就是说,如果您依赖 Map
不支持的 API,那么如果不对您的代码进行额外修改,您就无法轻松地从一种类型更改为另一种类型。