布尔型(Boolean)- getter is 和 get 的区别

13

看起来大家都认为以下类型的getter应该这样写:

  • 原始布尔类型 -> getter is
  • Boolean对象 -> getter get

示例:

public class Test {

    private boolean primitive;
    private Boolean object;

    public boolean isPrimitive() {
         return primitive;
    }
    public Boolean getObject() {
        return object;
    }
    //..
}

问题:

有没有规范或文档说明指定布尔值的getter的方式是正确的?或者这只是一个普遍的假设?

我问这个问题是因为例如 wsimport 会为Boolean对象生成getter is。这是工具错误,还是允许和正确的?

另一方面,一些框架无法正常使用这种getter。例如JSF(EL)或Dozer。


11
引用变量的最粗鲁名称是 object - Suresh Atta
1
在我看来,仅当布尔值名称是形容词而不是名词时,“is”才有效。 - Ceiling Gecko
@CeilingGecko 很多库都不同意。通常在处理抽象/超类型时...例如Gson...JsonElement.isJsonArray() - Brian Roach
1
有时候当使用"is"不太合适的时候,我会用"has" XD - Agostino
@user1600770:我也是。但只有在没有任何地方需要遵循bean规范的情况下。 - Gimby
因为我在使用Dozer(映射框架期望布尔对象的“get ...”)时遇到了这个问题,所以我点了赞。 - Gunnar
2个回答

12
字段 boolean myField 的获取方法可以是 getMyfield() 或者 isMyField()(用户可以选择)。我个人使用第二种格式,因为很多源代码生成工具也是如此。
这种格式是一种标准,它在 JavaBeans 规范中被定义。请参见该文档的第8.3.2节http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/

来自文档的引用:

In addition, for boolean properties, we allow a getter method to match the pattern:

  public boolean is<PropertyName>();
文档没有提到原始包装器,比如Boolean类。

1
更不用说规范甚至没有提到布尔属性 ;) - Jan Groth

10
// "is" used because the value can be either true or false. It's like asking isTrue?
public boolean isPrimitive() {
     return primitive;
}

// "get" is used because the value returned can be either true, false or null.  
// So, the third state 'null' makes you wonder if 'is' should be used or 'get'.
// "get" is more appropriate as Boolean can also have null.
public Boolean getObject() {
    return object;
}

但坦白说,这取决于开发者。在布尔值上使用getBoolean()并没有什么“错误”(使用is更有意义,仅此而已)。


我们没有被选为正确答案,我只能猜测。顺便说一下,Lombok的推理与你相同。 - Mohamed Samir

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