将 ArrayList 对象声明为 final 以在常量文件中使用

新手上路,请多包涵

我正在生成对象的 ArrayList。以下是代码

ArrayList someArrayList = new ArrayList();

Public ArrayList getLotOfData()
{
ArrayList someData = new ArrayList();
return someData;
}

someArrayList = eDAO.getLotOfData();

一旦我有了这个 ArrayList 对象“someArrayList”,我想将它声明为 public 和 final 并将它存储在一个 Constants 文件中,以便可以全局访问它。有什么办法可以做到吗?如果我将 Arraylist 对象声明为 public 和 final,那么我将无法为其重新分配任何值。我尝试了以下

public final ArrayList anotherArrayList = new ArrayList();

anotherArrayList.addAll(someArrayList);

我曾希望将此“anotherArrayList”存储为全局 ArrayList 对象并使用它,但这会返回空指针异常。我想像使用字符串常量“ConstantsFile.anotherArrayList”一样使用它。有任何想法吗???

原文由 Raghu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 643
2 个回答

番石榴 提供 ImmutableList 正是出于这个原因。 (此外,它没有不必要的空间开销 ArrayList 分配用于为您不会为您的应用程序添加的未来元素腾出空间。)

 public static final ImmutableList<String> CONSTANTS =
  ImmutableList.of("foo", "bar");

原文由 Louis Wasserman 发布,翻译遵循 CC BY-SA 3.0 许可协议

您可以轻松制作它 public static final ,但这不会阻止人们更改 _内容_。

最好的方法是通过以下方式 _安全地发布_“常量”:

  • 将其包装在不可修改的列表中
  • 使用实例块来填充它

产生一个带有初始化的简洁的最终声明:

 public static final List<String> list = Collections.unmodifiableList(
    new ArrayList<String>() {{
        add("foo");
        add("bar");
        // etc
    }});

或者,简单元素的相似但不同的样式(不需要代码)

 public static final List<String> list =
    Collections.unmodifiableList(Arrays.asList("foo", "bar"));

原文由 Bohemian 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题