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