2

boolean我对返回类型有疑问。检查以下代码:

代码示例 1

boolean flag = sampleMethod();

public boolean samplemethod(){
    return false;
}

代码示例 2

sampleMethod();

public boolean samplemethod(){
    return false; 
}

在上面的两个示例中,代码编译正确,没有任何编译时或运行时异常。我的疑问是,Java 并没有强制boolean在调用程序中分配返回类型,而对于其他数据类型,程序不起作用。你能向我解释一下这个原因吗?

4

3 回答 3

11

Java从不强迫您分配函数调用的返回值。你的其他代码一定有问题(你也可以在这里发布)

PS:这让我想起了旧的 Turbo Pascal,你必须启用扩展语法才能获得这种行为。

于 2010-02-15T09:07:51.907 回答
4

正如@DR 所说,Java 不会强制您分配方法调用的结果。void 或非 void 方法调用在 Java 中作为完整语句是有效的。

我推测Java以这种方式设计的原因包括以下几点:

  • 方便:如果必须分配每个非 void 方法调用的结果,大多数开发人员会觉得很麻烦。

  • 传统:C、C++ 和几乎没有其他语言强迫你这样做。(我对某些语言有模糊的回忆……但那是很久以前的事了。)

  • 无用:您不能阻止开发人员将结果分配给临时变量然后忽略它。或者编写一个做同样事情的包装方法。

  • 更好的选择:如果您想鼓励开发人员注意 Java 中的错误,请抛出适当的已检查异常。

于 2010-02-15T09:49:27.257 回答
0

javac当您忘记将结果分配给变量时无法发出警告,但FindBugs可以。

@CheckReturnValue(explanation="...")
public boolean samplemethod(){
    return false; 
}

sampleMethod(); // Now generates a warning
于 2010-02-15T12:37:55.950 回答