什么相当于Java中的“ByRef”?

时间:2013-08-07 13:52:08

标签: java vb.net

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

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

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

2 个答案:

答案 0 :(得分:8)

你做不到。 Java中的所有内容都是按值传递的,包括对象引用。但是,您可以创建一个“holder”对象,并在方法中修改其值。

public class Holder<T> {
    T value;
    public Holder(T value) {
        this.value = value;
    }
    // getter/setter
}

public void method(Holder<Foo> foo) {
    foo.setValue(something);
}

答案 1 :(得分:1)

Java没有等效性。

您需要从方法中返回对象,然后将其分配回来,例如

 myInteger = doSomething(myInteger);

或者您需要创建一个包装器对象,这些通常被命名为Holder。 如果你有一个名为myInteger的变量,你想要一些方法来改变,那么你 将其作为“Holder”类的成员传递给该方法。

e.g。 (这当然可以做成通用的)

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;
}