Java - 在构造函数中初始化 arraylist

标签 java arraylist constructor

我遇到过这段代码,但我不明白为什么它在语法上有效:

return new ArrayList<Module>() {
   {
      add(new AModule());
      add(new BModule());
      add(new CModule());
   }
   private static final long serialVersionUID = -7445460477709308589L;
 };
  1. 双{{代表什么?
  2. 如何将 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/

相关文章:

java - 如何在java中构建elasticsearch terms查询?

C++ 运算符重载和参数化构造函数

python - 在 __init__ 之外定义的实例属性 attribute_name

java - 如何将 apache-httpclient-4.x 连接到 axis2 stub

java - 抽象方法的异常行为

java - SSL 握手无法从 Android 客户端连接到 Google

Java ArrayList 抛出 IndexOutOfBoundsException。为什么?

java - 添加存储在数组列表中的 double 值

java - 具有自定义元素的 JList

iphone - Objective-c Iphone 如何设置属性的默认值