Tar*_*rik 10 java pass-by-reference
我们知道在将参数传递给方法时,两种语言都是按值传递的.但C#支持ref和out关键字传递原始类型的引用.我在Java中寻找相同的关键字和技术?
我的猜测是使用Integer包装类而不是intJava来传入.
有什么建议和例子吗?
WRe*_*ach 12
你的猜测是正确的.需要一个包装器(但不是Integer,因为它是不可变的).
有些人为此目的使用单个元素数组:
int[] x = { 0 };
int[] y = { 0 };
someMethod(x, y);
return x[0] + y[0];
Run Code Online (Sandbox Code Playgroud)
很多人会用GOTO对那种技术进行排名.
有些人定义了一个通用的持有者类:
public class Holder<T> {
private T _value;
private Holder(T value) { _value = value; }
public static of(T value) { return new Holder<T>(value); }
public T getValue() { return _value; }
public void setValue(T value) { _value = value; }
}
...
Holder<String> x = Holder.of("123");
Holder<String> y = Holder.of("456");
someMethod(x, y);
return x.getValue() + y.getValue();
Run Code Online (Sandbox Code Playgroud)
有些人定义了一个专用的类型:
SomeMethodResult result = someMethod(x, y);
return result.getX() + result.getY();
Run Code Online (Sandbox Code Playgroud)
有些人会安排在方法内完成工作,首先避免使用引用参数:
return someMethod(x, y);
Run Code Online (Sandbox Code Playgroud)
这些技术中的每一种都有优点和缺点:
就个人而言,我认为Java搞砸了这个.我宁愿避免使用引用参数,但我希望Java允许来自方法的多个返回值.但是,说实话,我不经常绊倒这个.我不会为这个功能提供肾脏.:)
| 归档时间: |
|
| 查看次数: |
3786 次 |
| 最近记录: |