Java 用于实例化初始化集合的压缩语法
我正在寻找用于实例化集合并向其中添加一些项的紧凑语法。我目前使用以下语法:Java 用于实例化初始化集合的压缩语法,java,collections,initialization,Java,Collections,Initialization,我正在寻找用于实例化集合并向其中添加一些项的紧凑语法。我目前使用以下语法: Collection<String> collection = new ArrayList<String>(Arrays.asList(new String[] { "1", "2", "3" })); 集合= 新的ArrayList(Arrays.asList(新字符串[]{“1”、“2”、“3”})); 我似乎还记得,有一种更简洁的方法可以做到这一点,即使用ArrayList的匿
Collection<String> collection =
new ArrayList<String>(Arrays.asList(new String[] { "1", "2", "3" }));
集合=
新的ArrayList(Arrays.asList(新字符串[]{“1”、“2”、“3”}));
我似乎还记得,有一种更简洁的方法可以做到这一点,即使用ArrayList
的匿名子类,然后在子类的构造函数中添加项。但是,我似乎记不起确切的语法。可能是这样
Collection<String> collection = new ArrayList<String>() {{
add("foo");
add("bar");
}};
Collection=newarraylist(){{
添加(“foo”);
添加(“酒吧”);
}};
也称为双括号初始化。请参见我想您正在考虑
collection = new ArrayList<String>() { // anonymous subclass
{ // anonymous initializer
add("1");
add("2");
add("3");
}
}
请注意,您没有创建使用可疑的ArrayList的匿名子类。
List s=Arrays.asList(“1”、“2”);
也许只有我一个人,但我不认为把事情复杂化有什么意义,纯粹是为了编写更短/更快的代码。考虑到输入的代码行数要少一些,调试/修改要容易得多,我很确定我会选择第二个选项
因此,除非有特别的理由推动保持这个简短,否则我会说坚持奥克姆剃刀,并给出一个问题的许多解决方案,使用最简单的解决方案。这样,当某件事确实出了问题(墨菲定律明确规定它会出问题)时,你就可以更容易地跟踪它了 您可以创建一个实用功能:
@SafeVarargs
public static <T> List<T> listOf(T ... values) {
return new ArrayList<T>(Arrays.asList(values));
}
通过这种方式,您可以非常轻松地填充列表,并且仍然保持其可变。只有在不需要结果可扩展的情况下才可以这样工作。
collection = new ArrayList<String>(Arrays.asList("1", "2", "3")); // yep, this one is the shorter
List<String> s = Arrays.asList("1", "2");
@SafeVarargs
public static <T> List<T> listOf(T ... values) {
return new ArrayList<T>(Arrays.asList(values));
}
collection = MyUtils.listOf("1", "2", "3");