java - 我什么时候想在实际类上声明接口(interface)?

标签 java oop class interface declaration

比如我经常看到这样的:

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>();

前者与后者的优缺点是什么?

最佳答案

对我来说,归结为几点。

您关心实现吗?您的代码是否需要知道 MapHashMap 还是 TreeMap?或者它只是关心它有某种键/值结构

这也意味着当我构建我的实现代码时,如果我公开一个返回 Map 的方法,我可以随着时间的推移更改实现而不影响依赖它的任何代码(因此这是一个坏主意的原因尝试并转换这些类型的值)

另一个是在代码中移动这些结构变得更容易,这样任何可以接受 Map 的方法都会比依赖于 的方法更容易处理>HashMap 实例

(我遵循的)约定基本上是使用满足 API 需要的最低功能接口(interface)。没有必要使用不提供 API 所需功能的接口(interface)(例如,如果您需要 SortedMap,则没有必要使用 Map)

恕我直言

关于java - 我什么时候想在实际类上声明接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11911554/

相关文章:

java - 为不带参数的 protected void 方法编写 Junit

java.lang.NoClassDefFoundError : org/apache/http/conn/HttpClientConnectionManager 错误

java - 以面向对象的方式思考

java - 通过创建对象为其他类的数组赋值

c++ - 如何创建在不同文件中相互使用的类?

java - 语法错误,插入 "Identifier"以完成 Enum Constant Header

java 如何指定程序应连接的正确IP地址

php - 类变量的作用域解析运算符

c++ - BlackJack 创建动态牌组 CO OOP

css - img 类标签在 firefox 中无法识别