オブジェクトの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オブジェクトとして保存して使用したいと思っていましたが、これはnullpointer例外を返します。文字列定数「ConstantsFile.anotherArrayList」のように使用したいと思います。何か案は???
Guava は ImmutableList
を提供します。 (また、ArrayList
がアプリケーションに追加しない将来の要素のためのスペースを確保するために割り当てる不要なスペースオーバーヘッドもありません。)
public static final ImmutableList<String> CONSTANTS =
ImmutableList.of("foo", "bar");
簡単に作成できますpublic static final
、しかし、それは人々がcontentsを変更するのを止めません。
最善のアプローチは、次の方法で安全に公開「定数」にすることです。
初期化を伴う1つのきちんとした最終宣言をもたらします:
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"));
Java 1.4互換の方法:
_public static final List STRINGS = Collections.unmodifiableList(
Arrays.asList(new String[] {"foo", "bar"}));
_
このようなリストは変更できません。add()
、remove()
、またはset()
などのメソッドを呼び出すと、UnsupportedOperationException
が発生します。
あまり古くないJavaバージョン:
_public static final List<String> STRINGS = Collections.unmodifiableList(
Arrays.asList("foo", "bar"));
_
そして最後に、Java 9には以下が付属しています:
_public static final List<String> STRINGS = List.of("foo", "bar");
_