そして今、changeState(State.NOT_ACTIVE)を使用すると、SomeObjectsとリスト内のすべてのObjectsで、またはSomeObjectsのみで状態が変更されますか?
あなたの考えがここにあるのか完全にはわかりません。
changeState(NOT_ACTIVE)
のインスタンスを呼び出すSomeObjects
と、メソッドの定義に従って、そのオブジェクトのstate
フィールドがに設定されますNOT_ACTIVE
。この単一のメソッド呼び出しは、単一の変数に対して単一の割り当てを実行するため、複数のオブジェクトを変更する方法はありません。
SomeObjectsのみの場合、changeState()を使用してリスト内のすべてのオブジェクトの状態を変更するにはどうすればよいですか?
changeState
メソッドがフィールド内に含まれるすべてのオブジェクトに状態を適用するようにしたい場合はobjects
、単純なループでこれを行うことができます。
public void changeState(State state) {
this.state = state;
for (SomeObject obj : objects) {
obj.state = state;
}
}
この場合、その列挙型を含むクラスを作成することが唯一の方法ですか?
ここでも、あなたがここで何を考えているのか正確にはわかりません。インスタンスに含まれるstate
すべてのインスタンスの値を設定しませんか?つまり、すでに定義されているクラスの、すでに存在するインスタンスに値を設定しますか?SomeObject
SomeObjects
もしそうなら、これはループで値を設定することによって上記のように行うことができます。フィールドが列挙型であるという事実は違いはありません。ここでは、プリミティブ型または参照型はすべて同じように動作します。
コメントに答えるために編集:ああ、根本的な問題はそもそもフィールドを使用していたようです。
コレクションのすべてのコンテンツを常にobjects
まったく同じ状態にしたい場合、それらすべてに個別のstate
フィールドがあるのはおそらく間違っています。インスタンスがそれ自体の状態を実際に独立して保持/制御SomeObject
しないという点で、これはモデリングエラーです。
私が以前に提案しようとしていたことは、フィールドに直接アクセスするのではなく、メソッドを実装する必要があるということです。これが今、注目を集めています。フィールドSomeObject
を持つのではなく、メソッドを持つ必要があります。特定のインスタンスを使用すると、現在の状態を取得する方法がありますが、これは必ずしも直接のオブジェクト参照として実装されているわけではありません。state
getState()
SomeObjects
そして、このメソッドの実装は、単にラッピングインスタンスの状態を取得することである必要があります(これは特に有益なクラス名ではありません)。したがって、次のように実装される可能性があります。
public class SomeObject {
private final SomeObjects parent;
public SomeObject(SomeObjects parent) {
this.parent = parent;
}
public State getState() {
return parent.state; // Ideally accessed via method too
}
}
これは、私があなたのデザインをどのように理解しているかと一致しています-それぞれSomeObject
がそのラッピングと同じ状態を持っていますSomeObjects
(したがって、暗黙的SomeObjects
に常に1つの親インスタンスを定義する必要があります)。上記のコードは、その設計をほぼ正確に表しています。
(そして、列挙型についてはまだ特別なことは何もありません。戻ってきた場合でも、またはint
の場合でも、同じように機能します。)String
Map<MyFoo, Set<Future<ResultSet>>