如何修改传入Java方法的枚举

如何修改传入Java方法的枚举,java,enums,pass-by-value,Java,Enums,Pass By Value,在上面的示例中,如何在alter方法中修改变量myResult?因为Java是按值传递的,所以示例只将其值分配给这个。结果简单地说,您不能在Java中执行此操作。基本上,您不能,因为Java是按值传递的 在Java中,最接近通过引用传递行为的方法是使用getter和setter创建一个“holder”类;e、 g public enum Result{ PASS, FAIL, MORE}; public Result myResult = Result.PASS; Test test = ne

在上面的示例中,如何在
alter
方法中修改变量
myResult
?因为Java是按值传递的,所以示例只将其值分配给
这个。结果

简单地说,您不能在Java中执行此操作。

基本上,您不能,因为Java是按值传递的

在Java中,最接近通过引用传递行为的方法是使用getter和setter创建一个“holder”类;e、 g

public enum Result{ PASS, FAIL, MORE};
public Result myResult = Result.PASS;

Test test = new Test(myResult);
test.alter();
然后,您可以将
alter()
编写为:

public class ResultHolder {
    private Result value;
    public ResultHolder(Result initial) { value = initial; }
    public void setValue(Result newValue) { value = newValue; }
    public Result getValue() { return value; }
}

请注意,这不是真正的按引用传递。

因为myResult是类字段,您可以在需要时通过指定其他值来更改它:
myResult=Result.MORE。你在哪里写这段代码并不重要

无法修改实际枚举值。它们本质上是命名为常量的类。
如果您希望更改枚举实例中的行为,那么您就不需要枚举(如果您可以更改对象,那么该对象的其他使用者就不能将其视为常量)。

就是这样:谢谢,我考虑过将其放入对象中,但想知道是否有其他方法可以伪造它。+1这是真正的答案。如果试图更改枚举参数,则不希望以枚举开头。
public class ResultHolder {
    private Result value;
    public ResultHolder(Result initial) { value = initial; }
    public void setValue(Result newValue) { value = newValue; }
    public Result getValue() { return value; }
}
public void alter(ResultHolder holder, Result newValue) {
    holder.setValue(newValue);
}
public class Test {
    private Result result;

    public Test(Result res){
        this.result = res;
    }

    public Result alter(){          // signature changed
        this.result = Result.FAIL;
        return this.result;         // new
    }
}

_

public enum Result{ PASS, FAIL, MORE};
public Result myResult = Result.PASS;

Test test = new Test(myResult);
myResult = test.alter();            // change the value