如何修改传入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