Java中的Boolean(Object) getters

5
假设我有一个名为foo的类,在其中有一个Boolean(不是boolean)变量bar
class foo {
    Boolean bar;

    Boolean isBar(){
        return bar;
    }

    boolean isBar(){
        return bar.booleanValue();
    }
}

在Java中,以上两种方法哪一种是正确的?

我知道两种方法都可以,但我想知道在Java中关于这个问题的编码规范是什么?


8
你希望返回Boolean还是boolean?如果你返回boolean,那么当barnull时你会如何处理? - Jon Skeet
3个回答

11

如果您实际上将使用布尔类型,那么您的方法应该是

Boolean getBar(){
    return bar;
}
否则,你的字段应该是原始的布尔类型。

3
他并不是在询问命名约定,而是在询问 bar.booleanValue();return bar; 的区别。这是一个不错的提示,但它并没有回答问题。(或者我误解了问题 :)) - Maroun
2
布尔值的getter方法可以使用get或者is作为前缀,所以命名是正确的,但这不是他所问的。 - Gabriel Negut
这个问题讨论了布尔字段的命名约定,推荐使用 isX... 我也是这样做的。 - selig
2
我认为在这里使用“getBar”更合适,因为Boolean明确是一个对象,也可以是“null”。这不是关于真或假,而是关于真、假和“无状态”的问题;) - Adrian
2
你们说得对,我确实误解了问题,已经相应地更改了答案。至于命名约定,在我看来,原始布尔值应该以“is”、“should”或“can”为前缀。对象布尔值应该以“get”为前缀。 - G-Man

3

boolean 是一种原始类型,它可以是 true 或者 falseBoolean 是一个用于包装 boolean对象Boolean 可以是 true, falsenull。除非你需要使用 null,否则请使用 boolean,因为它更节省内存。

Boolean 具有许多辅助方法,例如,您可以通过使用 Boolean.valueOf(theString); 来从字符串中得到一个 Boolean,该字符串可以是 "false" 或者 "true",而不是使用

if("true".equals(theString)) 
    primitiveBoolean = true;

2

除非bar可以为null,而这是你想在你的类中建模的东西,否则我会使用:

class foo {
    boolean bar;

    boolean isBar(){
        return bar;
    }
}

这种方法更简单、更快,且不会出现NullPointerException

但是,如果null是有效值并且您想要对其进行建模,则应使用Boolean/Boolean

请注意您的代码:

Boolean bar;

boolean isBar() {
    return bar.booleanValue();
}

甚至还有自动装箱的变量:

Boolean bar;

boolean isBar() {
    return bar;
}

...可能会抛出NullPointerException异常。特别是最后一个很令人困惑。


1
好观点 - 为什么要将Boolean作为实例变量呢? - selig
2
将布尔值作为对象是一种“好”的方式,可以拥有3个状态,例如“开”、“关”和“无所谓”。 - Adrian
1
@Adrian,G-Man:是的,这就是我想要表达的,如果“null是一个有效值并且您想要建模”。 - Harald K

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接