Android Studio:lint强制执行'&&'而不是'&'?

时间:2017-01-27 14:41:34

标签: java android android-studio operators linter

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

1 个答案:

答案 0 :(得分:0)

  

Android Studio linter设置中是否有选项可确保出现任何布尔值'&'运算符导致错误,只允许'&&&'操作

简短的回答是“不。”

您始终可以编写自己的lint规则(有关示例,请参阅here),但这不是IntelliJ中的默认选项。

这也不是“个人品味”的问题。 protected void UpdateXYProperties() { X1 = 0; X2 = (float)ActualWidth; Y1 = 0; Y2 = (float)ActualHeight; } &都存在,原因如&&|

当谈到布尔语句时,你的差异是正确的。但是,根本区别在于||是按位“和”,而&是逻辑“和”。

在很多情况下,有人可能会想要一个“和”,因此使用它是一个全面的错误并不是一个好主意。最常见的用例是将其用作掩码。

例如,MotionEvent的&&方法返回一个包含指针索引和动作的整数。要获得操作,您需要屏蔽返回值,如下所示:getAction()