1

我正在将一些代码从 VisualBasic 转换为 Java,在 VB 中使用 ByRef 关键字时遇到了障碍。这在 Java 中不存在!

我应该如何在 Java 中模拟 ByRef 调用?

编辑:只是为了澄清那些不了解 VB 的人,ByRef 在调用函数后在括号中标识一个变量,并使其当该变量在函数内部发生变化时,它也会在调用它的位置更高与仅记住变量值的 ByVal 不同。在方法中更改 ByVal 变量不会影响调用它的变量。

4

2 回答 2

10

你不能。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);
}
于 2013-08-07T13:54:24.447 回答
1

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;
}
于 2013-08-07T13:58:45.777 回答