我有一个问题,我猜对象的范围以及对象持有的值是否会在某些条件下改变。例如,我创建了一个类,我需要在其中构造多个对象的实例,但是这些实例需要在整个程序中使用和修改,并且在创建第一个实例后不应再创建新实例(我不不知道这将遵循什么设计模式(如果有的话)。我设计对象的方式类似于以下内容:
//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 中的对象,一旦我拥有该对象,我可以使用不同的 setter 方法对其进行处理,如下所示:
MyObject object1 = MyObjects.get("anObject");
object1.setVar1("这是对象的新 var1 字符串值");
上面的代码应该更改键“anObject”下的 HashMap 中对象中的字符串值。但我想知道这是否也适用于列表之类的东西?比如说我有一个列表作为对象中的值之一,如果我从 HashMap 中获取该对象,并调用类似:
object1.getList().add("new value in the object1 list");
这会将值添加到 hashMap 中的对象吗?我想知道这是因为因为我调用了: MyObject object1 = MyObjects.get("anObject"); 似乎它可能正在创建该类的新实例或只是将其复制过来,并且对该 object1 对象的任何更改都不会对 HashMap 中的对象进行。
我是否正确,对从 HashMap 获得的对象的任何值所做的更改将被放回 HashMap 中的对象?对不起这个愚蠢的问题。