4

列挙型の配列への最終的な参照は不変であるべきだと思います。

列挙型の一意性と特異性は JVM によって強制されるため、列挙型は不変であると言っても過言ではありません。

最終参照は変更できないため、参照は不変です。

しかし...配列はどうですか?列挙参照を含む配列を覆すことはまだ可能でしょうか?

データベース列に対応する列挙型のリストがあります。これらの列名とそれに関連するデータは変更されないため、次のようにリストをクラス変数として使用したいと思います。

static final List<MetaData<Client>> C_COLUMNS =
        DataTables.CLIENTS.getTableColumnsAsEnums();

ここで、CLIENTS は列列挙のリストが生成される DataTable 列挙です。これを行うメソッドは次のとおりです。

public <T extends DB> List<MetaData<T>> getTableColumnsAsEnums() {
    Class<? extends MetaData> cls = this.columnsEnumToken();
    return new ArrayList(Arrays.<MetaData<T>>asList(cls.getEnumConstants())); }

私は正しいですか?これはマルチスレッド設計の一部になるはずなので、静的データのこの重要なリストを作成すると、アプリが非常に脆弱になる方法について懸念しています...実際に変更可能である場合.

4

3 に答える 3

2

REFERENCE は不変であり、その参照の内容はそうではありません。それが物事の仕組みです。
したがって、以下は機能しません

public enum TheEnum {
//......
}

final TheEnum[] arr = new TheEnum[5];
var = new TheEnum[6];

しかし、これはうまくいくでしょう

public enum TheEnum {
  OPTION_ONE;
//......
}

final TheEnum[] arr = new TheEnum[5];
var[1] = TheEnum.OPTION_ONE;
于 2013-06-18T05:23:22.543 に答える