Rag*_*ghu 32 java final global constants arraylist
我正在生成一个对象的ArrayList.以下是代码
ArrayList someArrayList = new ArrayList();
Public ArrayList getLotOfData()
{
ArrayList someData = new ArrayList();
return someData;
}
someArrayList = eDAO.getLotOfData();
Run Code Online (Sandbox Code Playgroud)
一旦我有了这个ArrayList对象"someArrayList",我想将它声明为public和final,并将其存储在Constants文件中,以便可以全局访问它.有没有办法可以做到这一点?如果我将Arraylist对象声明为public和final,那么我将无法为其重新赋值.我尝试了以下内容
public final ArrayList anotherArrayList = new ArrayList();
anotherArrayList.addAll(someArrayList);
Run Code Online (Sandbox Code Playgroud)
我曾希望将"anotherArrayList"存储为全局ArrayList对象并使用它,但这会返回一个nullpointer异常.我想像String常量"ConstantsFile.anotherArrayList"一样使用它.有任何想法吗???
Boh*_*ian 73
您可以轻松制作public static final,但这不会阻止人们更改内容.
最好的方法是通过以下方式安全地发布 "常量":
导致初始化的一个整洁的最终声明:
public static final List<String> list = Collections.unmodifiableList(
new ArrayList<String>() {{
add("foo");
add("bar");
// etc
}});
Run Code Online (Sandbox Code Playgroud)
或者,简单元素的类似但不同的风格(不需要代码)
public static final List<String> list =
Collections.unmodifiableList(Arrays.asList("foo", "bar"));
Run Code Online (Sandbox Code Playgroud)
Lou*_*man 25
番石榴提供ImmutableList了这个原因.(此外,它没有ArrayList分配不必要的空间开销,以便为将来为您的应用程序添加的元素腾出空间.)
public static final ImmutableList<String> CONSTANTS =
ImmutableList.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
Nat*_*tix 21
Java 1.4兼容方式:
public static final List STRINGS = Collections.unmodifiableList(
Arrays.asList(new String[] {"foo", "bar"}));
Run Code Online (Sandbox Code Playgroud)
这样的列表是不可修改的,调用方法,如add(),remove()或set()将引起UnsupportedOperationException.
对于较不古老的Java版本:
public static final List<String> STRINGS = Collections.unmodifiableList(
Arrays.asList("foo", "bar"));
Run Code Online (Sandbox Code Playgroud)
最后,Java 9附带:
public static final List<String> STRINGS = List.of("foo", "bar");
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
73263 次 |
| 最近记录: |