Java 将布尔返回方法放置在if中是否等同于直接调用该方法?

Java 将布尔返回方法放置在if中是否等同于直接调用该方法?,java,methods,if-statement,Java,Methods,If Statement,我正在更新一些代码,我有一个void方法(validateFile),它测试文件并将失败直接写入一些日志文件。我想为通过的每个文件添加一个计数器,但我不想丢失在失败时完成的日志记录 严格来说,validateFile方法成功运行的原因是: validateFile(filename); 功能等同于此?(假设我将返回类型更改为boolean,并正确地输入返回语句) 如果它是等效的,是否有理由(最佳实践等)我不应该这样做?是的,您的代码将以这种方式工作,它将编译。大多数时候,这实际上是最好的方法

我正在更新一些代码,我有一个void方法(validateFile),它测试文件并将失败直接写入一些日志文件。我想为通过的每个文件添加一个计数器,但我不想丢失在失败时完成的日志记录

严格来说,validateFile方法成功运行的原因是:

validateFile(filename);
功能等同于此?(假设我将返回类型更改为boolean,并正确地输入返回语句)


如果它是等效的,是否有理由(最佳实践等)我不应该这样做?

是的,您的代码将以这种方式工作,它将编译。大多数时候,这实际上是最好的方法


编辑:假设在第一种情况下,您将其绑定到一个变量,并将该变量放置在if中。除此之外,第一种方法不起作用。

是的,它是等效的。不,我没有理由认为你不应该这样做

我想到的一个可能的警告是,在将其与条件运算符混合时要小心:

if (a() && b());

在这种情况下,
b()
将被调用,当且仅当
a()
返回
true
后一个具有更好的关注点分离。我更喜欢。

是的,
如果(validateFile(filename))
将以完全正常的方式运行
validateFile(filename)
。一旦它返回—假设它正常返回(而不是抛出异常)—它的返回值将完全按照您的预期使用。

是的,这将起作用


这种方法调用方法非常标准。

是的,它是等效的。就像:

boolean result = validateFile(filename);
if(result){
   passCount++;
}

是的,它是等价的;没有理由认为这可能不如原始代码

您也可以在一行上执行相同的操作,如下所示:

passCount += validateFile(filename) ? 1 : 0;

你所说的功能对等是什么意思?在第二种情况下,会发生一些额外的情况。但在这两种情况下,函数都会被执行。就validateFile的整体执行而言,函数在功能上完全等效。我想不出一个不这样做的理由,但我不想在一年后造成一种局面,让我的同事们不得不回到这一点上,并因为我这样做而诅咒我:)很好+我不会在这种情况下这样做,但是如果将来我需要这样做,我会(a()&b());避免短路的工作?感谢三元运算符的示例;我对开发工作还比较陌生,这对我来说是新的。
passCount += validateFile(filename) ? 1 : 0;