如何在Java中模拟按引用传递?
我是一个完整的Java新手。我知道Java将所有参数都视为按值传递,并且还有其他几个线程可以解释这一点。
例如,在C ++中,我可以执行以下操作:
void makeAThree(int &n){
n = 3;
}
int main()
{
int myInt = 4;
makeAThree(myInt);
cout << myInt;
}
哪个将输出3。我知道在Java中,所有参数都是按值传递的,因此您无法操纵传入的参数。在Java中,有没有一种标准的方法来 模拟
按引用传递?有没有办法调用操作传入变量的函数?对于我来说,很难绕开没有办法做到这一点的想法。
回答:
模拟传递引用的主要方法是传递包含值的容器。
static void makeAThree(Reference<Integer> ref){
ref.set(3);
}
public static void main(String[] args)
{
Reference<Integer> myInt = new Reference<>(4);
makeAThree(myInt);
System.out.println(myInt.get());
}
由于在Java中,它 引用
到由值(对象本身是从来没有在全部通过)传递的对象,设置ref
于3
在makeAThree
变化相同的对象则提到myInt
的main()
。
免责声明:Reference
这不是您可以直接使用现成的Java的类。我在这里将其用作其他任何对象类型的占位符。这是一个非常简单的实现:
public class Reference<T> { private T referent;
public Reference(T initialValue) {
referent = initialValue;
}
public void set(T newVal) {
referent = newVal;
}
public T get() {
return referent;
}
}
回答:
这并不是说修改方法的参数是一个好习惯。通常,这将被视为副作用。通常,最佳做法是将方法的输出限制为返回值和this
(如果该方法是实例方法)。修改参数是设计方法的一种非常“
C”的方式,并且不能很好地映射到面向对象的编程。
以上是 如何在Java中模拟按引用传递? 的全部内容, 来源链接: utcz.com/qa/399654.html