[英]Java - initialize arraylist at the constructor
我遇到了这段代码,我不知道为什么它可以协同工作:
return new ArrayList<Module>() {
{
add(new AModule());
add(new BModule());
add(new CModule());
}
private static final long serialVersionUID = -7445460477709308589L;
};
它定义了一个匿名类 ,它是ArrayList的子类:
return new ArrayList<Module>() {
...
};
这个子类包含一个实例初始化器块,即,每次构造该类的实例时都会执行的代码块:
{
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;
或者,如果您使用番石榴:
List<Module> list = Lists.newArrayList(new AModule(), new BModule(), new CModule());
要么
List<Module> list = new ArrayList<>(Arrays.asList(new AModule(), new BModule(), new CModule()));
这就是所谓的匿名内部类 。
它们使您可以同时声明和实例化一个类。
由于他们是从那里回来的,所以他们只是匿名创建。
您会看到这些双括号,因为一个括号用于类,另一个括号用于其中的静态块。
他们看起来像双括号,但实际上
{ // class
{ // block inside the class
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.