web-dev-qa-db-ja.com

ArrayListオブジェクトを定数ファイルで使用するための最終として宣言する

オブジェクトの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」のように使用したいと思います。何か案は???

30
Raghu

GuavaImmutableList を提供します。 (また、ArrayListがアプリケーションに追加しない将来の要素のためのスペースを確保するために割り当てる不要なスペースオーバーヘッドもありません。)

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

簡単に作成できます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"));
69
Bohemian

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");
_
20
Natix