0

オブジェクトのスコープを推測し、オブジェクトが保持する値が特定の条件下で変更されるかどうかについて質問があります。たとえば、オブジェクトの複数のインスタンスを構築する必要があるクラスを作成しましたが、これらのインスタンスはプログラム全体で使用および変更する必要があり、最初のインスタンスが作成された後に新しいインスタンスを作成する必要はありません (私は作成しません)。これがどのような設計パターンに従うかはわかりません)。私がオブジェクトを設計した方法は、次のようなものです。

//basic constructor class
public class MyObject {

private String var1;
private int var2;
private boolean vr3

public MyObject(String param1, int param2, boolean param3) {
    var1 = param1;
    var2 = param2;
    var3 = param3;
}

//getter and setter methods

}

//in main class
Map<String, MyObject> myObjects = new HashMap<String, MyObject>();

プログラムの開始時に、いくつかのファイルを検索して新しい MyObject オブジェクトを作成し、それらを HashMap に配置します。新しい MyObject を作成する必要があるのはそのときだけです。そのため、プログラム全体を通して、String キーに一致する値を取得することで HashMap 内のオブジェクトを取得します。そのオブジェクトを取得したら、以下のようなさまざまなセッター メソッドを使用してオブジェクトを処理できます。

MyObject object1 = MyObjects.get("anObject");

object1.setVar1("これは、オブジェクトの新しい var1 文字列値です");

そして、上記のコードは、キー「anObject」の下の HashMap にあるオブジェクトの文字列値を変更する必要があります。しかし、これはリストのようなものでも機能するのでしょうか? たとえば、オブジェクトの値の 1 つとしてリストがあり、そのオブジェクトを HashMap から取得して、次のように呼び出したとします。

object1.getList().add("new value in the object1 list"); 

それは hashMap のオブジェクトに値を追加しますか? MyObject object1 = MyObjects.get("anObject"); と呼んだので、これは疑問に思っています。そのクラスの新しいインスタンスを作成するか、それをコピーするだけで、そのobject1オブジェクトへの変更はHashMapのオブジェクトに加えられないようです。

HashMap から取得したオブジェクトの値に加えられた変更は、HashMap のオブジェクトに戻されるというのは正しいですか? このばかげた質問で申し訳ありません。

4

2 に答える 2