我遇到过这段代码,但我不明白为什么它在语法上有效:
return new ArrayList<Module>() {
{
add(new AModule());
add(new BModule());
add(new CModule());
}
private static final long serialVersionUID = -7445460477709308589L;
};
- 双{{代表什么?
- 如何将 static final 添加到类实例中?
最佳答案
它定义了一个匿名类,它是 ArrayList 的子类:
return new ArrayList<Module>() {
...
};
并且这个子类包含一个实例初始化 block ,即每次构造这个类的实例时执行的代码块:
{
add(new AModule());
add(new BModule());
add(new CModule());
}
我会说这是一种不好的做法。定义一个新类只是为了能够向 ArrayList 添加一些东西是没有用的。
就这样
List<Module> list = new ArrayList<>();
list.add(new AModule());
list.add(new BModule());
list.add(new CModule());
return list;
或者,如果您使用 Guava:
List<Module> list = Lists.newArrayList(new AModule(), new BModule(), new CModule());
或者
List<Module> list = new ArrayList<>(Arrays.asList(new AModule(), new BModule(), new CModule()));
关于Java - 在构造函数中初始化 arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24912168/