我有一个包含一个可能为null的对象的varible。在尝试调用方法时,我必须检查null。如果变量为null,我希望结果为false。什么被认为是好的和可读的风格?
EG
class MyClass {
bool boolMethod() {
return true;
}
}
void main() {
MyClass mc = new MyClass();
MyClass mcnull = null;
bool val1 = mc?.boolMethod();
bool val1null = mcnull?.boolMethod();
bool val2 = mc != null && mc.boolMethod();
bool val2null = mcnull != null && mcnull.boolMethod();
}
特别是在if语句中使用时,我认为第一个版本更具可读性:
if (mc?.boolMethod())...
与
if (mc != null && mc.boolMethod())...
但是IntelliJ给了我暗示'?'的价值。运算符可以是'null',它不适合作为locaical运算符的操作数。 (null_aware_in_logical_operator)。好的 - 这是正确的,因为当变量为null时,我使用null作为布尔值。但在我的情况下这是好的,我尽量避免压制警告。
建议的方式是什么?其他想法?
我认为一个共同的模式是
bool val1 = (mc?.boolMethod() ?? false);
这里不需要parens但是如果这些表达式嵌入到更复杂的表达式中,由于??
的优先级较低,它们通常是获得预期行为所必需的