从有关 Java 7 的各种在线文章中,我了解到 Java 7 将具有如下的集合字面量1:
List<String> fruits = [ "Apple", "Mango", "Guava" ];
Set<String> flowers = { "Rose", "Daisy", "Chrysanthemum" };
Map<Integer, String> hindiNums = { 1 : "Ek", 2 : "Do", 3 : "Teen" };
我的问题是:
- 难道不能提供静态方法
of
在所有可以按如下方式使用的集合类中:
List<String> fruits = ArrayList.of("Apple", "Mango", "Guava");
IMO 这看起来和文字版本一样好,而且相当简洁。那么为什么他们必须发明一种新语法(编辑:"new"是指“Java 新手”。)?
- 当我说
List<String> fruits = [ "Apple", "Mango", "Guava" ];
什么List
我真的会得到吗?会不会是ArrayList
或LinkedList
还是别的什么?
1 如评论中所述,集合文字没有在 Java 7 和 Java 8 中脱颖而出。(这是来自 Brian Goetz 的 email,一位 Oracle 开发人员,总结了不包含此功能的理由;这里是 proposal 本身。)
最佳答案
问题2的答案:
final List<Integer> piDigits = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 9];
给你一个不可变的列表。
这个提议的整个想法是子类型不能被指定。编译器根据右侧的集合选择合适的实现。
在此处阅读详细信息:Proposal: Collection Literals
问题 1 的答案:是的。这是风格问题。
关于java - 为什么要收集文字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2700775/