【发布时间】:2017-02-03 15:16:12
【问题描述】:
我知道使用通用列表而不是对象列表的两个原因。
-
限制哪些类型的对象可以插入到列表中
List<Object> stringObjects = Arrays.asList("a",new Integer(5)); List<String> genericStrings = Arrays.asList("a",new Integer(5));//compile error -
在您的 IDE 中访问正确的方法
List<Object> stringObjects = Arrays.asList("a",new Integer(5)); List<String> genericStrings = Arrays.asList("a"); stringObjects.get(0).length();//compile error genericStrings.get(0).length();
当我在一次采访中给出这个答案时,但他们似乎对我的答案不太满意。 那么使用通用列表而不是对象列表还有其他原因吗?
【问题讨论】:
-
你的标题和最后一句不一致。你问的是哪个?
-
你是对的。我已经编辑了问题
-
我能想到的最大的两个是不可具体化的泛型和数组的协变。然后是能够创建不可变列表、同步访问等。Effective Java 第二版第 25 条“优先使用列表而不是数组”中对此进行了非常全面的介绍。
-
作为面试官,我会跟进您的回答,询问为什么您的第一个示例在编译时安全性方面与
Object[] stringObjects = {"a", 5}; String[] genericStrings = {"a", 5};有任何不同,对于您的第二个示例也是如此。
标签: java generics abstraction