如何从类中的方法更改对象

时间:2011-04-06 13:01:12

标签: java

在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);
}

有一个很好的方法吗?非常感谢!

[我确定这个问题之前应该已经回答了,但我找不到了,如果是这样的话我很抱歉]

3 个答案:

答案 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,那么模式构建器是一个良好的开端。