比如我经常看到这样的:
Set<Integer> s = new TreeSet<Integer>();
Set<Integer> s = new HashSet<Integer>();
Map<Integer, String> m = new HashMap<Integer, String>();
结束
TreeSet<Integer> ts = new TreeSet<Integer>();
HashSet<Integer> hs = new HashSet<Integer>();
HashMap<Integer, String> hm = new HashMap<Integer, String>();
前者与后者的优缺点是什么?
最佳答案
对我来说,归结为几点。
您关心实现吗?您的代码是否需要知道 Map
是 HashMap
还是 TreeMap
?或者它只是关心它有某种键/值结构
这也意味着当我构建我的实现代码时,如果我公开一个返回 Map 的方法,我可以随着时间的推移更改实现而不影响依赖它的任何代码(因此这是一个坏主意的原因尝试并转换这些类型的值)
另一个是在代码中移动这些结构变得更容易,这样任何可以接受 Map
的方法都会比依赖于 的方法更容易处理>HashMap
实例
(我遵循的)约定基本上是使用满足 API 需要的最低功能接口(interface)。没有必要使用不提供 API 所需功能的接口(interface)(例如,如果您需要 SortedMap
,则没有必要使用 Map
)
恕我直言
关于java - 我什么时候想在实际类上声明接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911554/