为什么在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条评论
登录后参与评论

相关文章

来自分类Dev

在Java声明中使用什么变量

来自分类Java

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

来自分类Java

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

来自分类Dev

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

来自分类Javascript

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

来自分类Java

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

来自分类Java

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

来自分类Dev

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

来自分类Dev

为什么要在Typescript中使用接口

来自分类Dev

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

来自分类Java

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

来自分类Dev

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

来自分类Dev

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

来自分类Java

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

来自分类Java

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Java

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

来自分类Java

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

来自分类Java

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

来自分类Dev

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

来自分类Java

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

来自分类Dev

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

来自分类Dev

为什么接口变量是公共的

来自分类Java

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

来自分类Dev

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

来自分类Dev

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

Related 相关文章

  1. 1

    在Java声明中使用什么变量

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

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

  8. 8

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

  9. 9

    为什么要在Typescript中使用接口

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

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

  14. 14

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

  15. 15

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

  16. 16

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

  17. 17

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

  18. 18

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

  19. 19

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

  20. 20

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

  21. 21

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

  22. 22

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

  23. 23

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

  24. 24

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

  25. 25

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

  26. 26

    为什么接口变量是公共的

  27. 27

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

  28. 28

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

  29. 29

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

热门标签

归档