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()
例如,这是这样工作的:它返回instanceof String
(也许是一个空字符串!),直到返回null
以指示“搜索”结束。
当然,这不限于引用类型的返回值。关键是必须有一些永远都不是有效值的特殊值,并且您可以将该值用于特殊目的。
另一个经典示例是String.indexOf
:它返回-1
以指示搜索失败。
注意 :由于Java没有“输入”和“输出”参数的概念,因此不需要使用
i-
ando-
前缀(例如)。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。
问题内容: 使用第三方API,我观察到以下内容。 而不是使用 它使用类似 我得到分配的“输出”字符串。 我很好奇实现这种功能的原因。使用此类输出参数的优点是什么? 问题答案: 在您的示例中有不对的地方。 在上面的程序中,将输出字符串“ foo”, 而不是 “ Hello World”。 某些类型是可变的,在这种情况下,您可以修改传递给函数的对象。对于不可变的类型(例如),您必须构建某种包装类,而可
问题内容: 我如何在我的Web服务中使用json参数,我可以使用@PathParam获取参数,但是获取json数据作为参数却不知道该怎么做。 } 用什么代替@PathParam以及以后如何解析。 问题答案: 我假设您正在谈论使用随请求发送的JSON消息正文。 如果是的话,请注意,虽然不是完全禁止的,有一个普遍的共识是GET请求应该 不会 有请求主体。有关原因的说明,请参见“ 带有请求正文的HTTP
我正在尝试设置JavaFX环境,因此我引用了相应的jar。为了运行代码,我需要在launch.json中使用一些VM参数(“vmArgs”:--module path/Users/adrif/Downloads/javafx-sdk-14.0.2.1/lib--add modules javafx.controls,javafx.fxml”)。我在一个多项目文件夹中工作,因此每次创建一个新项目时,
问题内容: 我正在通过此方法使用RESTfull Web服务: 在我的Android应用中,我想调用此方法。如何使用org.apache.http.client.methods.HttpPost给参数赋予正确的值; 我注意到我可以使用批注@HeaderParam并将标题添加到HttpPost对象。这是正确的方法吗?这样做: 在httpPost上使用setEntity方法将不起作用。它仅使用json
问题内容: 我已经编写了一个VBScript函数来调用存储过程。过去,我编写了许多函数,这些函数使用输入参数调用存储过程,但是在这种情况下,我需要使用Output参数。 在另一个应用程序中,我使用实体框架调用完全相同的存储过程,因此该存储过程很好。 这是我的代码: adParamInput, 50, userId)) cmd.Parameters.Append(cmd.CreateParamete
我很难找到关于这些命令的功能、返回什么以及如何在C++中的应用程序中获得它们的信息。这是一个练习,这就是我需要如何获得我将从中读取的输入文件和我将向其写入的输出文件: 我试图使用: 谢谢!