根据命名约定返回Boolean类的getter的Java名称

时间:2015-02-11 08:52:51

标签: java netbeans

我注意到,对于返回Boolean(而非boolean!)的getter,netbeans会生成getter,其中包含" get"字首。例如:

private Boolean main;

public Boolean getMain(){
  return this.main;
}

这是错的(根据命名惯例)?或者"是"仅为基本类型的前缀?

6 个答案:

答案 0 :(得分:6)

Netbeans在这里没有错 - 因为Boolean 对象属性get是正确的。一方面,属性值可以是null,在这种情况下is是没有意义的。

javabeans spec允许is类型boolean作为特例,不提及 Boolean。假设此特殊情况扩展到Boolean个对象将无效。

答案 1 :(得分:5)

以下是实际JavaBeans specification document

的引用
  

8.3.2布尔属性

     

此外,对于布尔属性,我们允许getter方法匹配模式:

     

public boolean is<PropertyName>();

     

可以提供此is<PropertyName>方法而不是get<PropertyName>方法,或者除了get<PropertyName>方法之外,还可以提供此方法。在任何一种情况下,如果布尔属性存在is<PropertyName>方法,那么我们将使用is<PropertyName>方法读取属性值。

请注意,这适用于boolean而非Boolean值。另请注意,is允许的替代get,而get 始终是合适的

答案 2 :(得分:1)

这取决于是否将包含该方法的类视为JavaBean。

如果您打算成为JavaBean,那么Marko Topolnik's answer是准确的。

否则就没有对错。是否应使用getis(或其他内容)取决于方法的合同和目的。伊兰的第一个评论是现场评论:

  

这里没有对错。我认为isMain或hasMain或supportsMain(主要意味着什么)更具描述性。我不认为它应该是一个不同的布尔值或布尔值。

你问这个约定是什么,并且我说惯例是将方法命名为描述性和语义准确。

详细说明 vs get

  • 如果该方法旨在作为资本-B Boolean属性的一般访问者,使其具有值null,则使用get更有意义。< / p>

  • 如果该方法旨在给出内部(在本例中为private)非空标志的状态,我认为is将是一个合适的前缀。 (虽然我可能会使用boolean作为返回值,除非有一个常见的用例例如isMain().hashCode()或类似的东西。)

答案 3 :(得分:0)

Boolean对象上,您可以应用多种方法:toStringequalsvalueOf ..

您的问题没有完整的答案,这实际上取决于使用情况以及调用方法的人。有意义:

public boolean isMain(){
    return this.main.booleanValue();
}

但如果您的逻辑没有确保main可以有null值,则get是一个很好的前缀。

答案 4 :(得分:0)

这是对的。 Boolean是原始数据类型boolean的包装类。所以布尔会返回对象。对象也使用相同的get,就像原始数据类型一样。

答案 5 :(得分:0)

根据OCP Oracle认证专业Java SE 8程序员II学习指南书

以下哪项可以正确包含在JavaBean中?

public boolean isPlaying() { return playing; }
public boolean getPlaying() { return playing; }
public Boolean isDancing() { return dancing; }

第一行是正确的,因为它为布尔变量定义了正确的getter。 第二个示例也是正确的,因为布尔型可以使用is或get。 第三行是 错误,因为布尔包装器是对象,因此应该以get开头。