我正在将一些代码从 VisualBasic 转换为 Java,在 VB 中使用 ByRef 关键字时遇到了障碍。这在 Java 中不存在!
我应该如何在 Java 中模拟 ByRef 调用?
编辑:只是为了澄清那些不了解 VB 的人,ByRef 在调用函数后在括号中标识一个变量,并使其当该变量在函数内部发生变化时,它也会在调用它的位置更高与仅记住变量值的 ByVal 不同。在方法中更改 ByVal 变量不会影响调用它的变量。
你不能。Java 中的一切都是按值传递的,包括对象引用。但是,您可以创建一个“持有者”对象,并在方法中修改其值。
public class Holder<T> {
T value;
public Holder(T value) {
this.value = value;
}
// getter/setter
}
public void method(Holder<Foo> foo) {
foo.setValue(something);
}
Java 没有等价物。
您要么需要从您的方法中返回对象,然后将其分配回来,例如
myInteger = doSomething(myInteger);
或者你需要制作一个包装器对象,这些通常被命名为一个 Holder。如果您有一个变量myInteger
,您希望更改某个方法,您可以将它作为“Holder”类的成员传递给该方法。
eg(这自然可以做成泛型)
class IntegerHolder {
public Integer myInteger;
}
IntegerHolder myHolder;
myHolder.myInteger = myInteger;
doSomething(myHolder);
//use the possibly altered myHolder.myInteger now.
在 doSomething 中,您现在可以更改 myHolder.myInteger ,调用 doSomething() 的方法可以看到该更改,例如
void doSomething(IntegerHolder holder)
{
holder.myInteger = holder.myInteger * 100;
}