【发布时间】:2019-03-25 21:26:00
【问题描述】:
我遇到了一个问题,因为我的类变量会自动更新为最新值。但我想要每个对象的单独值。
public class B {
public String state;
public B(){
this.state = "new";
}
public void firstMethod(){
this.state = "first";
}
public void secondMethod(){
this.state = "second";
}
}
public abstract class C {
public B b;
public C(B service){
this.b = service;
}
public abstract void execute();
}
public static void main(String[] args) {
B b = new B();
C c = new C(b) {
@Override
public void execute() {
b.firstMethod();
}
};
C c1 = new C(b) {
@Override
public void execute() {
b.secondMethod();
}
};
c.execute();
c1.execute();
System.out.println(c.b.state);
System.out.println(c1.b.state);
}
我得到 c 和 c1 两个状态都等于“秒”。我知道如果我创建两个单独的 B 对象,即 b1 和 b2 并在初始化时将它们传递给 c 和 c1,那么它会给我带来不同的结果,正如我所期望的那样。但是有没有办法通过将相同的对象传递给 c 和 c1 来获得 c.state 作为“第一”和 c1.state 作为“第二”?
【问题讨论】:
-
你在哪里调用
execute()来处理你的对象? -
想想你在问什么:"我有 3 个人。我给 C 人 B 的家庭住址,我给 C1 人 B 的家庭住址。然后我告诉人C去他们的家庭住址,把住在那里的人涂成红色。然后我告诉C1去他们有的家庭住址,把住在那里的人涂成蓝色。然后我检查人B是什么颜色,他们总是被涂成蓝色。我能不能让那个人 B 既是红色的人又是蓝色的人?” 不,不,你不能。
-
我同意。假设我需要将 C 和 C1 注入到数组列表中。那么,有什么办法可以看出C和C1的关联状态有什么区别呢?可能会在任何一个类或变量中添加一些属性,以允许我将关联的状态值与 C 和 C1 一起存储?