我正在用Java编写一个方法,我想模拟引用。由于java没有像C#中那样的out关键字,也没有像C++中那样的引用/指针,我想知道我是否可以使用反射来模拟它。
一个例子是:
public static boolean ChangeValue(Object Input, Object Output) {
//Use some reflection here to change the value of Output?
return true;
}
然后在main中:
public static void main(String[] args) {
int I = 0;
ChangeValue(I, I);
System.out.println(I);
}
那么..我可以使用反射来更改传递给 ChangeValue 方法的任何参数的值吗?我不想返回复合对象..
最佳答案
Java 是按引用值传递的,这意味着如果将一个对象传递给一个方法并修改它,该方法“外部”的对象也会被修改(因为该对象只是一个引用)。一个例子是调用 Arrays.sort
在数组上。
但是,基元的情况并非如此(例如 int
),在这种情况下,Java 是按值传递的,因此您使用 int I
的示例不会'不工作。为了修改 int I
的值,您应该从方法中返回一个 int
,并将其相应地设置为 I
。
这意味着在 ChangeValue
方法中修改对象的值不需要反射。在方法内对对象所做的任何操作,实际上都会修改 main
方法范围内的对象。
关于Java反射改变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14617934/