java 参数输出_如何在Java中使用输出参数?

Java传递价值;没有out参数像C#中。

您可以使用return,或者将作为引用传递的对象(按值)进行mutate。

相关问题

代码示例

public class FunctionSample {

static String fReturn() {

return "Hello!";

}

static void fArgNoWorkie(String s) {

s = "What am I doing???"; // Doesn't "work"! Java passes by value!

}

static void fMutate(StringBuilder sb) {

sb.append("Here you go!");

}

public static void main(String[] args) {

String s = null;

s = fReturn();

System.out.println(s); // prints "Hello!"

fArgNoWorkie(s);

System.out.println(s); // prints "Hello!"

StringBuilder sb = new StringBuilder();

fMutate(sb);

s = sb.toString();

System.out.println(s); // prints "Here you go!"

}

}

也可以看看

至于OP需要帮助的code,下面是使用特殊值(通常为引用类型为null)来指示成功/失败的典型解决方案:

代替:

String oPerson= null;

if (CheckAddress("5556", oPerson)) {

print(oPerson); // DOESN'T "WORK"! Java passes by value; String is immutable!

}

private boolean CheckAddress(String iAddress, String oPerson) {

// on search succeeded:

oPerson = something; // DOESN'T "WORK"!

return true;

:

// on search failed:

return false;

}

请改用String返回类型,用null表示失败。

String person = checkAddress("5556");

if (person != null) {

print(person);

}

private String checkAddress(String address) {

// on search succeeded:

return something;

:

// on search failed:

return null;

}

这就是java.io.BufferedReader.readLine()的工作原理,例如:它返回instanceof String(可能是一个空字符串!),直到返回null表示“搜索”的结束。

当然,这不限于引用类型返回值。关键是,必须有一些特殊的值永远不是有效的值,并且您将该值用于特殊目的。

另一个经典的例子是String.indexOf:它返回-1表示搜索失败。

Note: because Java doesn’t have a concept of “input” and “output” parameters, using the i- and o- prefix (e.g. iAddress, oPerson) is unnecessary and unidiomatic.

一个更通用的解决方案

如果您需要返回多个值,通常它们以某种方式相关(例如单个点的x和y坐标)。最好的解决方案是将这些值封装在一起。人们已经使用Object []或List< Object>,或者一个通用对< T1,T2&gt ;,但是真的,你自己的类型是最好的。 对于这个问题,我推荐一个不可变的SearchResult类型这样封装的布尔和String搜索结果:

public class SearchResult {

public final String name;

public final boolean isFound;

public SearchResult(String name, boolean isFound) {

this.name = name;

this.isFound = isFound;

}

}

然后在搜索功能中,执行以下操作:

private SearchResult checkAddress(String address) {

// on address search succeed

return new SearchResult(foundName, true);

:

// on address search failed

return new SearchResult(null, false);

}

然后你使用它像这样:

SearchResult sr = checkAddress("5556");

if (sr.isFound) {

String name = sr.name;

//...

}

如果你愿意,你可以(也许应该)使最终的不可变字段不公开,而使用public getter。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值