在java中,是否可以从其类的方法中更改Object实例?我想做这样的事情:
public void setMix(MyColor[] colors){
MyColor colorMix = MyColor.colorMixer(colors);
// Instead of this
this.red = colorMix.getRed();
this.blue = colorMix.getBlue();
this.green = colorMix.getGreen();
// I would like to do something like:
// this = colorMix;
// which is not allowed
}
public static MyColor colorMixer(MyColor[] colors){
int red = 0;
int green = 0;
int blue = 0;
...
// Here I work with the colors array to compute three new components
return new MyColor(red, green, blue);
}
有一个很好的方法吗?非常感谢!
[我确定这个问题之前应该已经回答了,但我找不到了,如果是这样的话我很抱歉]
答案 0 :(得分:2)
你要做的事情(重新分配this
)是不可能的,至少在java中是不可能的。
假设您有以下课程:
class Foo {
MyColor color;
public Foo(Mycolor color) {
this.color = color;
}
}
以下情况:
MyColor color = new MyColor();
Foo foo = new Foo(color);
假设您可以以某种方式在MyColor中重新分配this
,那么您将获得的是MyColor的新实例,但foo.color
仍将指向旧的MyColor实例。
你可以做的只是让颜色实例改变它的内部状态。这样,保存对该颜色实例的引用的每个其他对象都将具有“新”颜色对象。
答案 1 :(得分:1)
在java中,是否可以从其类的方法中更改Object实例?我
是你可以,这是最常见的例子
class Person{
String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;//setting name
}
}
如果您要为this
分配内容,则其final
答案 2 :(得分:0)
在实例方法中无法执行this = new MyColor()
。看来你需要一个工厂,一个像Integer.valueOf(2)这样的静态方法来访问一个类的配置实例。
如果您想分几个步骤配置objet,那么模式构建器是一个良好的开端。