Android Studio linter设置中是否有选项可确保出现任何布尔值'&'运算符导致错误,只允许'&&&'运算符(同时仍允许&运算符对数字进行逐位运算)?
TL; DR :您可能知道,在Java中'&'运算符在执行AND运算之前评估两个操作数,而'&&&'运算符停止计算第一个操作数的操作数,评估为false。
我个人觉得这种区别既令人困惑又毫无意义。使用'&&'操作员,您可以执行以下操作:
if (a != null && fn (a)) { ... }
意味着永远不应使用值 null 调用fn
。如果我不小心写了:
if (a != null & fn (a)) { ... }
整个测试完全没有意义。我想确保这种拼写错误永远不会发生。 linter规则将是强制执行此操作的完美方式。
linter规则应该区分操作数的类型。当&
与数字一起使用时,其含义是按位和运算符。当然,我不想不允许这样做,因为它非常有用。此外,OR运算符|
和||
的行为方式类似,我想在允许它进行数值运算时禁止|
作为布尔运算符。所以基本上:
int a = (3 & 4); // OK
boolean b = (true && false); // OK
boolean c = (true & false); // linter error, hopefully
int d = (5 | 7); // OK
boolean e = (true || false); // OK
boolean f = (true | false); // linter error, hopefully
答案 0 :(得分:0)
Android Studio linter设置中是否有选项可确保出现任何布尔值'&'运算符导致错误,只允许'&&&'操作
简短的回答是“不。”
您始终可以编写自己的lint规则(有关示例,请参阅here),但这不是IntelliJ中的默认选项。
这也不是“个人品味”的问题。 protected void UpdateXYProperties()
{
X1 = 0;
X2 = (float)ActualWidth;
Y1 = 0;
Y2 = (float)ActualHeight;
}
和&
都存在,原因如&&
和|
。
当谈到布尔语句时,你的差异是正确的。但是,根本区别在于||
是按位“和”,而&
是逻辑“和”。
在很多情况下,有人可能会想要一个“和”,因此使用它是一个全面的错误并不是一个好主意。最常见的用例是将其用作掩码。
例如,MotionEvent的&&
方法返回一个包含指针索引和动作的整数。要获得操作,您需要屏蔽返回值,如下所示:getAction()
。