这两个代码片段之间有区别吗?如果有,那又如何? [复制]

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开发者有偏好哪个是标准实现吗?

以上是关于这两个代码片段之间有区别吗?如果有,那又如何? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

这两个代码片段有啥区别?

贫血域模型和活动记录之间的区别

这两个片段有啥区别?

前端需要写自动化测试吗?那又该怎么写呢?建议收藏

前端需要写自动化测试吗?那又该怎么写呢?建议收藏

[,] 2d 数组和 [][] 数组之间有啥功能区别吗? [复制]