这是一个真正的初学者问题(我仍在学习Java基础知识)。
我可以(有点)理解为什么方法将返回List <String>而不是ArrayList<String>,或者为什么它们将接受List参数而不是ArrayList。如果对方法没有影响(即,如果不需要ArrayList中的特殊方法),则这将使该方法更加灵活,并且更易于调用者使用。其他集合类型(例如Set或Map)也是如此。
List <String>
ArrayList<String>
我不明白的是:创建这样的局部变量似乎是一种惯例:
List<String> list = new ArrayList<String>();
虽然这种形式的频率较低:
ArrayList<String> list = new ArrayList<String>();
这有什么好处?
我所看到的是一个次要的缺点:必须为java.util.List添加一个单独的“ import”行。从技术上讲,可以使用“ import java.util。*”,但我也不经常看到,这可能是因为“ import”行是由某些IDE自动添加的。
当你读
您会得到一个想法,即您只关心a,List<String>而对实际实现的重视程度则降低了。同样,您将自己限制为由声明的成员,List<String>而不是特定的实现。您不必关心数据是存储在线性数组还是某些特殊的数据结构中,只要它看起来像是即可List<String>。
List<String>
另一方面,阅读第二行将使您想到代码 关心 变量are ArrayList<String>。通过编写此代码,您(对将来的读者)暗含地说您不应该盲目更改实际的对象类型,因为其余代码 依赖 于它实际上是一个ArrayList<String>。