我在我正在做的一个项目中遇到了这个代码
(这是用Java编写的)
if (Boolean.TRUE.equals(foo.isBar()))
Foo#isBar()定义为boolean isBar()
,因此不能返回null
真的有什么理由要这样写吗?我自己就会写
if (foo.isBar())
但也许我错过了一些微妙的东西。
谢谢
发布于 2012-10-08 04:10:14
因为isBar
返回一个基本的boolean
,所以没有语义上的区别。另外,第二种方法更简洁、更清晰、更高效,因为结果不必为调用自动装箱,然后再提取原始布尔值。在所有这些情况下,没有理由使用第一个方法,也没有一些使用第二个方法的理由,所以请使用第二个方法。我给其他程序员很大的空间,但是我会坐下来和那些在专业代码中添加类似内容的人聊天。
发布于 2012-10-08 04:01:40
我希望foo.isBar()
返回一个布尔值。在这种情况下,您可以始终编写if (foo.isBar())
。如果foo.isBar()
返回Boolean
,则可以是Boolean.TRUE
、Boolean.FALSE
或NULL
。在这种情况下,if (Boolean.TRUE.equals(foo.isBar()))
确保在一个场景中执行if块(TRUE),并在其余的2中省略。
当 foo.isBar()
返回布尔值NULL.时, if (foo.isBar())
之上的将失败。
发布于 2012-10-08 03:58:23
我怀疑“旧的遗留代码没有很好的理由”--事实上,我认为它更糟糕。(我想知道如何比较int
s .)
使用TRUE.equals
的代码需要一个装箱转换、一个额外的方法调用(以及内部的所有内容),最后,它看起来很草率。
我知道的唯一原因是,如果foo.isBar
被键入为返回Boolean
(而不是boolean
),那么它可能返回null
Boolean b = null;
// throws an exception when it tries to unbox b because it is null
boolean isTrue1 = (boolean)b;
// evaluates to false
boolean isTrue2 = Boolean.TRUE.equals(b);
// evaluates to false as well
boolean isTrue3 = b != null ? (boolean)b : false;
https://stackoverflow.com/questions/12775082
复制相似问题