为什么在Java中使用接口名称声明变量?

Zilk:

这是一个真正的初学者问题(我仍在学习Java基础知识)。

我可以(某种程度上)理解为什么方法将返回List <String>而不是ArrayList <String>,或者为什么它们将接受List参数而不是ArrayList。如果对方法没有影响(即,如果不需要ArrayList中的特殊方法),则将使该方法更加灵活,并且更易于调用者使用。其他集合类型(例如Set或Map)也是如此。

我不明白的是:创建这样的局部变量似乎是一种常见的做法:

List<String> list = new ArrayList<String>();

虽然这种形式的频率较低:

ArrayList<String> list = new ArrayList<String>();

这有什么好处?

我所看到的是一个次要的缺点:必须为java.util.List添加一个单独的“ import”行。从技术上讲,可以使用“ import java.util。*”,但是我也不经常看到,这可能是因为“ import”行是由某些IDE自动添加的。

Mehrdad Afshari:

当你读

List<String> list = new ArrayList<String>();

您会得到一个想法,即您只关心a,List<String>而对实际实现的重视程度则降低了。同样,您将自己限制为由声明的成员,List<String>而不是特定的实现。您不必关心数据是存储在线性数组还是某些特殊的数据结构中,只要它看起来像是即可List<String>

另一方面,阅读第二行将使您想到代码关心变量be ArrayList<String>通过编写此代码,您(对将来的读者)暗含地说您不应该盲目更改实际的对象类型,因为其余代码依赖于它实际上是一个ArrayList<String>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Java声明中使用什么变量

是否应该始终在Java中使用接口声明变量?

为什么必须用Java声明接口?

是否可以在 Java 中使用变量属性名称?如果不是,为什么?

为什么要在JavaScript变量的名称中使用$(美元符号)?

为什么在Java中使用静态嵌套接口?

为什么要在Java中使用类似的接口?

在java接口声明中使用模板参数

为什么要在Typescript中使用接口

为什么在接口中使用端口?

为什么在Java方法名称中使用数字是错误的?

为什么我们不能在声明结构变量名称时使用连字符?

为什么不使用javascript声明变量?

为什么将Java接口方法声明为抽象方法?

为什么不能用Java声明Monad接口?

为什么要在头文件中声明的变量中使用 extern?

为什么在Swift变量声明中使用关键字“ get”?

为什么不能在此实例声明中使用类型变量?

为什么可以在成员函数中使用尚未声明的成员变量?

为什么许多Java Stream接口方法在参数中使用下界通配符而不是通用类型?

为什么我们在Java中使用接口引用类型?

为什么在JAVA 8中使用不同的谓词接口?

为什么在 Java Lambda 表达式中使用函数式接口

为什么Java的允许两个变量具有相同名称在同一范围内声明?

当对象实际引用数组时,为什么Java在方法声明中使用Object而不是T []

为什么接口变量是公共的

在Java中使用动态名称分配变量

为什么允许使用不带名称的声明?

为什么环境声明使用名称空间和模块?