这两个代码片段之间有区别吗?如果有,那又如何? [复制]
Posted
技术标签:
【中文标题】这两个代码片段之间有区别吗?如果有,那又如何? [复制]【英文标题】:Is there a difference between these two code snippets, and if so what? [duplicate] 【发布时间】:2016-02-26 03:26:52 【问题描述】:所以我似乎无法弄清楚这两个代码 sn-ps 之间的区别,或者什么时候更喜欢另一个。 片段#1
public static void main(String[] args)
List testList = new ArrayList();
testList.add(new Integer(6));
String string = (String) testList.get(0);
片段 #2
public static void main(String[] args)
ArrayList testList = new ArrayList();
testList.add(new Integer(6));
String string = (String) testList.get(0);
我的解释是在 sn-p 1 中,一个名为 testList 的列表被分配给一个 ArrayList 对象。在 sn-p 2 中,一个名为 testList 的 ArrayList 被分配给一个 ArrayList 对象。然而,这对我来说没有意义。
附带问题:两者之一是首选标准吗?
【问题讨论】:
我认为这个问题可能有一些重复 两者都很糟糕,因为您使用的是原始类型而不是泛型,并且您试图将 Integer 读取为 String(泛型会保护您免受此错误的影响)。无论如何,首先 sn-p 会好一点,因为您正在接口上编程(我们使用List
作为类型或 testList
接口,因为我们并不真正关心该列表是如何实现的,这使我们可以灵活地稍后更改该实现,如果我们想要)。
查看article了解更多信息。
接口,除其他外,让您在未来有更大的灵活性(如果您需要更改您正在处理的集合类型)
非常感谢您提供的文章链接,在几分钟的阅读中消除了很多困惑。很棒的文章。 @MaxZoom
【参考方案1】:
第一个sn-p使用接口List
类型,第二个使用对象类型ArrayList
。
除非你真的需要来自ArrayList
的任何方法,否则你应该使用接口类型来防止类型混淆。
【讨论】:
【参考方案2】:List
是一个接口。 ArrayList
实现 List
。因此,从功能上讲,两个 sn-ps 的工作方式相同。
【讨论】:
啊,Java开发者有偏好哪个是标准实现吗?以上是关于这两个代码片段之间有区别吗?如果有,那又如何? [复制]的主要内容,如果未能解决你的问题,请参考以下文章