什么相当于Java中的"ByRef"?

nic*_*ick 1 java vb.net

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

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

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

Kay*_*man 9

你不能.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);
}
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的答案,但是这样的问题(明显的重复:[Java是否通过引用传递](http://stackoverflow.com/questions/40480/is-java-pass-by-reference))应该被关闭.由于您还没有投票关闭的能力,因此应该标记它. (4认同)
  • @SteveP.它是重复的吗?虽然问题的关键可能是相同的,但这个问题似乎只是有一堆关于Java如何只允许一个参数传递机制的讲座,并且似乎没有解决CLR`ref`概念很容易实现的事实.在Java中模拟.当然,这些答案很长,我没有深入阅读,但在页面上搜索没有给"持有人","代理人",甚至"模拟"只有1个不是这个答案. (2认同)