栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Java通过值传递;没有

out
像C#这样的参数。

您可以使用

return
,或更改 作为 参考传递的对象( 值)。


代码样例

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需要帮助的代码,以下是使用特殊值(通常

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()
例如,这是这样工作的:它返回
instanceofString
(也许是一个空字符串!),直到返回
null
以指示“搜索”结束。

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

另一个经典示例是

String.indexOf
:它返回
-1
以指示搜索失败。

注意 :由于Java没有“输入”和“输出”参数的概念,因此不需要使用

i-
and
o-
前缀(例如)。
iAddress``oPerson


更一般的解决方案

如果您需要返回多个值,通常它们是以某种方式关联的(例如

x
y
单个的坐标
Point
)。最好的解决方案是将这些值封装在一起。人们使用
Object[]
List<Object>
或通用
Pair<T1,T2>
,但实际上,最好使用您自己的类型。

对于此问题,我建议使用这样的不可变

SearchResult
类型来封装
boolean
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;  //...}

如果需要,可以(可能应该)将

final
不可变字段设置为non-
public
,而改用
public
getter。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399956.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号