public class Test {
private Result result;
public Test(Result res){
this.result = res;
}
public void alter(){
this.result = Result.FAIL;
}
}
public enum Result{ PASS, FAIL, MORE};
public Result myResult = Result.PASS;
Test test = new Test(myResult);
test.alter();
在上面的示例中,如何修改myResult
方法中的变量alter
?由于Java是按值传递的,因此该示例只是将其值赋给this.result
。
答案 0 :(得分:3)
您无法修改实际的枚举值。它们本质上是名为常量的类。 如果你想在enum实例中改变行为,那么你不需要枚举(如果你可以改变对象,那么对象的其他使用者不能将它视为常量)。
答案 1 :(得分:2)
基本上,你不能,因为Java是按值传递的。
在Java中,您可以获得最接近引用行为的行为是创建一个带有getter和setter的“holder”类; e.g。
public class ResultHolder {
private Result value;
public ResultHolder(Result initial) { value = initial; }
public void setValue(Result newValue) { value = newValue; }
public Result getValue() { return value; }
}
然后,您可以将alter()
写为:
public void alter(ResultHolder holder, Result newValue) {
holder.setValue(newValue);
}
请注意,这是不真实的传递引用。
答案 2 :(得分:0)
简单地说,你不能用Java做到这一点。
答案 3 :(得分:0)
由于myResult是类字段,您可以通过分配其他值来更改它:
myResult = Result.MORE;
。你在哪里编写这段代码并不重要。
答案 4 :(得分:0)
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