Java 将变量声明为接口类型而不是其特定实现是否违反KISS或YAGNI?
有一个HashMap实例。我将对该实例做的唯一一件事是调用Map接口HashMap实现中描述的values()方法 所以我不会使用接口提供的任何其他可能性 我应该根据YAGNI和KISS声明HashMap的变量类型,还是应该对接口编码并将类型声明为Map 接口编码示例:Java 将变量声明为接口类型而不是其特定实现是否违反KISS或YAGNI?,java,Java,有一个HashMap实例。我将对该实例做的唯一一件事是调用Map接口HashMap实现中描述的values()方法 所以我不会使用接口提供的任何其他可能性 我应该根据YAGNI和KISS声明HashMap的变量类型,还是应该对接口编码并将类型声明为Map 接口编码示例: Map<Integer, String> langMap = new HashMap<>(); Map langMap=newhashmap(); 类变量的示例: HashMap<Integer
Map<Integer, String> langMap = new HashMap<>();
Map langMap=newhashmap();
类变量的示例:
HashMap<Integer, String> langMap = new HashMap<>();
HashMap langMap=newhashmap();
是针对接口编程还是具体实现,应根据您是否需要访问特定于不属于接口一部分的HashMap
的方法来确定。使用Map
接口就像说“我需要Map
接口指定的功能,但并不真正关心它是如何实现的。”直接使用HashMap
类就像说“我需要Map中的功能,它需要作为HashMap
实现”
对接口进行编程既不违反KISS也不违反YAGNI,事实上,有人可能会提出相反的观点
- 与特定实现相比,针对通用接口编程更简单(KISS)
- 如果不需要特定的实现,则应使用通用接口(YAGNI)