我有三节课。例如,我将它们称为AwesomeClass,CoolClass,PrettyClass。 AwesomeClass实例化CoolClass和PrettyClass的对象。现在,我希望CoolClass更改PrettyClass中的变量。
最好的方法是什么?我能想到的一种方法是将PrettyClass的引用发送到CoolClass,然后CoolClass可以执行instanceOfPrettyClass.setSomeVariable("42");
之类的操作。或者我可以将AwesomeClass视为控制器,将其他两个类视为视图(这是他们正在使用的),并让CoolClass在AwesomeClass中调用一些方法,然后在PrettyClass中调用另一个方法,但这感觉非常混乱。
编辑一些示例代码
public class AwesomeClass
{
public AwesomeClass()
{
CoolClass coolClass = new CoolClass();
PrettyClass prettyClass = new PrettyClass();
}
}
public class CoolClass
{
public CoolClass()
{
Color colour = Color.RED;
}
}
public class PrettyClass
{
public PrettyClass()
{
//I want to set coolClass's colour to Color.BLACK here
}
}
答案 0 :(得分:2)
我很惊讶没有人回答这个问题。我认为你有正确的想法,虽然可能会倒退。
public class AwesomeClass
{
public AwesomeClass()
{
CoolClass coolClass = new CoolClass();
PrettyClass prettyClass = new PrettyClass( coolClass ); // change
}
}
public class CoolClass()
{
private Color colour; // change
public CoolClass
{
colour = Color.RED; // change
}
public void setColor( Color color ) { // add setter
colour = color;
}
}
public class PrettyClass
{
public PrettyClass( CoolClass cc ) // change
{
//I want to set coolClass's colour to Color.BLACK here
cc.setColor( Color.BLACK ); // change
}
}
我认为就是这样。
答案 1 :(得分:1)
你可以使用构造函数来完成:
public class CalledClassA {
public void doCalledClassA() {..}
}
public class CalledClassB {
private CalledClassA calledClassA;
public CalledClassB(CalledClassA calledClassA) {
this.calledClassA = calledClassA;
}
public void doSomething() {
calledClassA.doCalledClassA();
}
}
或使用上面建议的setter。 由于以下原因,我更喜欢使用承包商:REPEAT AFTER ME: SETTER INJECTION IS A SYMPTOM OF DESIGN PROBLEMS
答案 2 :(得分:0)
我们可以申请静态方法"设置"在CoolClass?我们不需要在" PrettyClass"中传递参考作为参数。那种情况下的构造函数。任何时候我们想要改变颜色,只需使用CoolClass.set(...)来做。