1

Android Studio linter 设置中是否有一个选项来确保布尔“&”运算符的任何出现都会导致错误并且只允许“&&”运算符(同时仍然允许 & 运算符对数字进行按位运算)?

TL;DR:您可能知道,在 Java 中,'&' 运算符在执行 AND 运算之前计算两个操作数,而 '&&' 运算符在第一个计算结果为 false 的操作数处停止计算操作数。

我个人认为这种区别既令人困惑又毫无意义。使用 '&&' 运算符,您可以执行以下操作:

if (a != null && fn (a)) { ... }

这意味着fn永远不应该使用null值调用它。如果我不小心写了:

if (a != null & fn (a)) { ... }

整个测试完全没有意义。我想确保这种错字永远不会发生。短绒规则将是执行此操作的完美方式。

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
4

1 回答 1

0

Android Studio linter 设置中是否有一个选项来确保布尔“&”运算符的任何出现都会导致错误并且只允许“&&”运算符?

最简洁的答案是不。”

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

这也不是“个人品味”的问题。&并且&&两者都存在是有原因的,就像|and一样||

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

在很多情况下,有人可能需要按位“和”,因此将其用作一揽子错误并不是一个好主意。最常见的用例是将其用作掩码。

例如,MotionEvent 的getAction()方法返回一个带有指针索引和动作的整数。要获取操作,您需要像这样屏蔽返回值getAction() & ACTION_MASK

于 2017-01-27T14:51:24.280 回答