请考虑以下代码:
public class Test {
static private volatile Integer number1 = 42;
static private volatile Integer number2 = 42;
public static void main(String[] args) {
Test test = new Test();
test.changeInteger(number1);
System.out.println(number1);
}
public void changeInteger (Integer number) {
number = new Integer(3);
}
}
我想根据传递给方法number1
的参数更改number2
或changeInteger
的值。显然这不起作用。有没有办法在不使用反射的情况下使用Java工作?
澄清:我希望电话changeInteger(number1)
更改字段number1
。
答案 0 :(得分:4)
public class Test {
public Integer[] number = {42, 42};
public static void main(String[] args) {
Test test = new Test(); //you create a new instance
test.number[0] = new Integer(3); //change first element to 3
test.number[1] = new Integer(2); //change second element to 2
System.out.println(test.number[0]); //print first element
}
}
关于数组:manual 演示:http://ideone.com/aKzQI0
答案 1 :(得分:2)
您需要从方法中返回变量的值。否则变量值的变化限制了'changeInteger'方法的方法调用栈。
public static void main(String[] args) {
Test test = new Test();
number1 = test.changeInteger(number1);
System.out.println(number1);
}
public Integer changeInteger (Integer number) {
return new Integer(3);
}
答案 2 :(得分:2)
只是添加到@Margus的答案。
在我的书中,如果变量名称永远包含一个数字,例如number1
,则表明您没有正确行事。使用数组。
另一方面,如果您的变量实际上是名为,那么您最好使用Hashtable
。
类中字段的名称是硬编码的。如果您需要非硬编码的“字段名称”,那么它们不是真正的字段。他们是数据!所以散列表/字典是Java中的正确路径。