百科问答小站 logo
百科问答小站 font logo



为什么java中声明多用Map,List而不是具体实现类型? 第1页

  

user avatar   Ivony 网友的相关建议: 
      

一般来说接口定义的要求是宽进严出,也就是说参数类型更宽泛,更高层抽象,返回值更具体,更准确。


为什么需要这样?

如果一个函数只需要一个序列就能工作,那么没有必要弄个列表,这样这个函数可以更好的适配各种环境的调用,而不需要额外的适配代码。

如果函数能够产出一个列表,那么我就应当返回列表,别人只需要序列的时候,列表同样可以用。但别人需要列表的时候就不需要额外的适配了。


简单说就是宽进严出可以尽可能的避免各种适配代码。

当然任何原则都有其适用和不适用的场景。宽进严出是一个比较弱的原则,不能因为宽进严出来破坏语义。例如一个功能需要一个集合(不包含重复元素),那么参数就必须是集合而不应该是容器。一个功能的返回结果是只读的数据,就不应当返回可以读写的更具体的类型。



PS:

上文中的序列,可以理解为:Iterable<T>或者IEnumerable<T>,上文中的列表,可以理解为List<T>或者ILIst<T>




  

相关话题

  如何看待小米手环 4 NFC 版在各大电商平台(包括小米商城)瞬间缺货? 
  有哪些IT人才懂的梗? 
  求助,大一学Java还是C#? 
  不太喜欢计算机,不喜欢编程,但是学了一段时间老师觉得我还可以,还建议学吗? 
  关于Qt性能的损失,有没有一个可以量化的概念? 
  为什么 Python 工程师很少像 Java 工程师那样讨论垃圾回收? 
  把一个视频文件后缀改成txt,得到是一串代码,那么反过来,有没有一种规律,编写一段代码然后生成视频? 
  如何看待「大部分程序员只会写三年代码」的说法? 
  为什么国家定义程序员为新生代农民工,而不是高端或科技人才,这说明程序员门槛低吗? 
  网上说 Java 的性能已经达到甚至超过 C++,是真的吗? 

前一个讨论
Nokia Lumia 920、925和928之间如何选择?
下一个讨论
如果双十一全国断网一天会发生什么?





© 2024-05-16 - tinynew.org. All Rights Reserved.
© 2024-05-16 - tinynew.org. 保留所有权利