のJava:それは、実行時に列挙型のフィールドを変更することが許されていますか?
Enum自体は変更できませんが、はい、列挙型の値で定義されているフィールドは変更できます。
年齢を変更する列挙型のメソッドを使用できますか? コンパイラがそれをとるようですが、リスクはありますか?それは悪い習慣ですか?
はい、あなたはEnumsを使いこなすことができます。
列挙型は、「物」の安定した固定列挙を表すように設計されています。
これらは定数と考えることができます。 Oracle documentationから
:
列挙型は、定義済みの定数の 設定する変数の可能特殊なデータ・タイプです。変数は、あらかじめ定義されている値のうち、 のいずれかに等しくなければなりません。一般的な例には、 コンパスの指示(NORTH、SOUTH、EAST、WESTの値)と 曜日が含まれます。
これらは定数なので、列挙型のフィールド名は大文字の です。
Java Enumでは、これらのこと自体をプロパティで記述することができます。あなたが列挙型を定義するとき
、あなたはそれを実行します。
public enum Friends {
BOB(14),
ALICE(22);
private int age;
private Friends(int age){
this.age = age;
}
あなたの事は何人かの友人であり、年齢は友達のプロパティです。
あなたの列挙型の問題は、あなたのものが安定したものではないように見えることです。友情は移動するものであり、enumを記述するために使用するプロパティです。
あなたの例では、あなたの友人は州のインスタンスのように見えます。
友達を表現するための単純なクラス(Enumとは反対)を定義し、クライアントコード内でそれらをインスタンス化して変更することは、それらを表現して行動するためのより自然な方法です。
同じことを試しましたか? – Panther
enumの変数はグローバル変数であり、注意して使用する必要があります。それらは定数でなければならず、したがって不変です。そうしないと、デバッグが不可能な異常なバグに終わることがあります。列挙型の内部で変数を変更する必要があると感じる場合は、おそらく列挙型を間違って使用している可能性があります。 – Tobb
あなたの質問は実際には[XY問題](http://mywiki.wooledge.org/XyProblem)のように聞こえるところがあります。本当の解決策が別のアプローチを完全に使用するのであれば。はい、あなたは列挙型が保持するフィールドの状態を変更することができます。私は@Tobbに同意します。これは私にとって正しいことではありません。おそらく、EnumMapのような別の構文を使用することを望みます。各列挙型を潜在的に変更可能なオブジェクトに関連付けます。 –