Java 如何规避网络的缺点`||`

Java 如何规避网络的缺点`||`,java,Java,我有两种方法booleanfoo1()和booleanfoo2()。如果其中至少有一个是true,那么我需要调用save()。但我需要两个函数来运行 如果我写If(foo1()| | foo2()){save()}那么foo2()将不会运行,因为|的工作方式 我现在写 boolean f1 = foo1(); boolean f2 = foo2(); if (f1 || f2) {save()} 但这不是很优雅 我是否遗漏了一些明显的内容?您应该使用操作符(请参阅): 请注意,这同样适用于和

我有两种方法
booleanfoo1()
booleanfoo2()
。如果其中至少有一个是
true
,那么我需要调用
save()
。但我需要两个函数来运行

如果我写
If(foo1()| | foo2()){save()}
那么
foo2()
将不会运行,因为
|
的工作方式

我现在写

boolean f1 = foo1();
boolean f2 = foo2();

if (f1 || f2) {save()}
但这不是很优雅


我是否遗漏了一些明显的内容?

您应该使用
操作符(请参阅):

请注意,这同样适用于
。例如,如果您编写:

if (returnFalse() & returnTrue()) {
    destroyTheWorld();
}
然后两种方法都会运行,但世界是安全的

请注意,不熟悉
|
操作符的程序员可能会认为这是一个输入错误,并可能会在其中添加另一个管道。确保做好文档记录,或者简单:

f1 = method1();
f2 = method2();

if (f1 || f2) {
   // ...
}

你确实错过了一些显而易见的东西

使用
|
而不是
|


前者总是同时计算两个参数,适用于
boolean
类型。但它不是特别地道,因此容易被过度热情的重构者修改,所以我建议您使用注释,或者保留所谓的不雅代码,因为这确实为您提供了我浮华的解决方案所缺乏的隐式清晰性。

使用位运算符:

这将保证对这两个术语进行评估,因此在您的案例中执行这两个方法


if(foo1()| foo2()){save()}

您可以使用
操作符

只要做:

if (f1 | f2) {save()}

@P45迫在眉睫:一定要对它或其他东西进行评论,否则它看起来像一个打字错误。“这不是很优雅”我不同意。你的意图很清楚。每一次的清晰度都超过了行数。如果您使用
If(foo1()| foo2()){save();}
这看起来像是一个打字错误,并且模糊了确保您同时调用这两个函数的重要性。依赖
|
而不是一个捷径运算符可能是一个令人惊讶的用法。这表明
foo2()
有副作用,阅读此代码是否需要这些副作用尚不清楚。我认为你应该这样做,你已经在上面清楚地表明你试图实现什么。
|
|
之间的区别很容易被忽略(就像你可能做的那样)@T.J.Crowder snap。
if (f1 | f2) {save()}