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/

相关文章:

c++ - 用返回空 vector 的对象填充 vector

java - 在值对象中存储常量

c++ - 如何声明包含 B 类实例的结构 A,其中 B 类具有返回结构 A 的函数?

java - 这段 Java 代码如何实例化一个抽象类?

java - 单独的 GUI 类如何与逻辑类通信?

java - java 中的示例 Web 应用程序,在 web.xml 中具有安全约束

java - 从 Java 构造函数内部调用私有(private)方法

java - DateTimeFormatter 抛出日期字符串的 DateTimeParseException

c++ - 从成员变量中借用值?

javascript - 我的 ES6 类方法是否应该返回一个 Promise,即使没有必要?