Java:修改作为Reference传递的参数

时间:2016-05-29 02:04:00

标签: java reference

我必须实现一个具有以下签名的接口方法:

public int runMethod(final int key, Reference <String> result);

我必须在方法返回之前更新result参数的值。例如,如果在调用方法时result的值为ABC,我需要将其修改为DEF并返回调用方。有人可以建议我如何实现它?

3 个答案:

答案 0 :(得分:4)

您无法修改传递给该方法的变量。例如:

public int runMethod(final int key, Reference <String> result) {
    result = null; // Only changed the method's version of the variable, and not the variable that was passed to the method
}
...
Reference<String> ref = ...
runMethod(0, ref);
// ref is still what you originally assigned it to

但是,您可以修改字段并调用您传递的对象的方法。

public int runMethod(final int key, Reference <String> result) {
    result.someField = ...; // Here we are changing the object, which is the same object as what was passed to the method.
}
...
Reference<String> ref = ...
runMethod(0, ref);
// ref.someField has now been changed

另一种方法是将方法的返回类型更改为Reference<String>并返回更新后的值。

public Reference<String> runMethod(final int key, Reference <String> result) {
    return ...;
}
...
Reference<String> ref = ...
ref = runMethod(0, ref);
// ref is now whatever you returned from the method

答案 1 :(得分:1)

如果你真的想作为参考传递,将它包装在数组中是一种棘手的方法:

class TestRef{
  static void func(int[] arr){arr[0] = -arr[0];}
  public static void main(String[] args){
    int[] arrI = new int[1];
    arrI[0] = 250;

    System.out.println(arrI[0]); // 250
    func(arrI);
    System.out.println(arrI[0]); // -250
  }
}

答案 2 :(得分:-3)

在java对象中实际上是通过引用传递的。也就是说,参数&#39;结果&#39; runMethod中的内容与调用者中的对象完全相同,而不是副本。因此,通过更新runMethod的Reference参数的内容,您将实现您所描述的目标。

然而,&#39;结果&#39;本身实际上并不是指向调用者传递变量的指针,因此无法覆盖对象本身,只能更新它的内容。