我必须实现一个具有以下签名的接口方法:
public int runMethod(final int key, Reference <String> result);
我必须在方法返回之前更新result
参数的值。例如,如果在调用方法时result
的值为ABC
,我需要将其修改为DEF
并返回调用方。有人可以建议我如何实现它?
答案 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;本身实际上并不是指向调用者传递变量的指针,因此无法覆盖对象本身,只能更新它的内容。