gpt4 book ai didi

java - 将对象传递给方法并更改属性

转载 作者:行者123 更新时间:2023-11-30 08:18:38 25 4
gpt4 key购买 nike

如果我有一个如下所示的类:

class A {
private List<B> bs = new ArrayList<B>;

public List<B> getBs() {
return bs;
}
}

它包含一个 B 类型的对象列表。

另一个类使用这个列表并将列表中的一个对象交给类 C 的另一个对象:

class SomeOtherClass {

private C c;

public void someMethod() {
//code...
ArrayList<B> bs = mA.getBs();
c.setB(bs.get(0));

}

}

最后修改了对象b的成员字段的一些值。

class C {
private B b;

public void setB(B b) {
this.b = b;
this.b.ChangeValue();
}
}

这种方式当然会修改原始列表中的对象,这就是我想要的。但是,我发现类 C 修改类 A 的列表 bs 中对象的值非常令人困惑。对于其他开发人员来说,很难看到此方法更改了值。所以我认为我在这里所做的被认为是不好的做法,不是吗?`编写此类代码的更好方法是什么?

最佳答案

首先,我想说 getBs() 是个坏主意,因为该方法的调用者可以清除列表或向其中添加元素,这将是一个更严重的变化到 A 的状态,而不仅仅是更改列表元素之一的属性。

您可以将其替换为 getB(int),它返回该列表的第 i 个元素。现在,如果 B 是不可变的,您的工作就完成了,getB(int) 的调用者无法更改 A 的状态。

如果 B 是可变的,您可以决定 getB(int) 将返回 bs.get(i) 的副本。

总而言之,我将替换:

public void getBs() {
return bs;
}

无论是

public void getB(int i) {
return bs.get(i);
}

public void getB(int i) {
return new B(bs.get(i));
}

当然,您还应该添加范围检查,以确保i 是一个有效的索引。

关于java - 将对象传递给方法并更改属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27402315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com