Java 将变量声明为接口类型而不是其特定实现是否违反KISS或YAGNI?

Java 将变量声明为接口类型而不是其特定实现是否违反KISS或YAGNI?,java,Java,有一个HashMap实例。我将对该实例做的唯一一件事是调用Map接口HashMap实现中描述的values()方法 所以我不会使用接口提供的任何其他可能性 我应该根据YAGNI和KISS声明HashMap的变量类型,还是应该对接口编码并将类型声明为Map 接口编码示例: Map<Integer, String> langMap = new HashMap<>(); Map langMap=newhashmap(); 类变量的示例: HashMap<Integer

有一个HashMap实例。我将对该实例做的唯一一件事是调用Map接口HashMap实现中描述的values()方法

所以我不会使用接口提供的任何其他可能性

我应该根据YAGNI和KISS声明HashMap的变量类型,还是应该对接口编码并将类型声明为Map

接口编码示例:

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)

感谢您提供的链接,但其中包含有关接口编程内容的信息。我的问题是,在这个例子中,我是否应该遵循这个规则,或者YAGNI和KISS,因为这里没有使用接口。该链接中的第二个答案回答,IMHO,很好,为什么你应该编程到一个接口。我把它涂成红色,没有找到答案。它证明了编程接口本身是好的。我同意这一点。但它不能回答我是否应该在不需要的时候编程接口。我不明白为什么这不能回答你的问题。要点是:除非你有充分的理由不这样做,否则你应该对一个接口编程。在你的例子中,我看不出有什么理由不这么做。@TomaszSmykowski我认为问题在于,你认为它不是默认的编码方式。但是,如果您认为它是默认的编码方式,那么不以这种方式编程将违反KISS或YAGNI。