getter的Java名称,根据命名约定返回布尔类



我注意到,对于返回Boolean(而不是boolean!)的getter,netbeans会生成前缀为"get"的getter。例如:

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

这是错误的吗(根据命名惯例)?或者"is"前缀仅用于基元类型?

这里引用了实际JavaBeans规范文档中的一句话:

8.3.2布尔属性

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

public boolean is<PropertyName>();

可以提供该is<PropertyName>方法来代替get<PropertyName>方法,或者除了get<PropertyName>方法之外还可以提供该方法。在任何一种情况下,如果布尔属性存在is<PropertyName>方法,则我们将使用is<PropertyName>方法读取属性值。

请注意,这适用于boolean而不是Boolean值。还要注意,isget允许的替代方案,而get总是合适的

Netbeans在这里没有错-对于Boolean对象属性,get是正确的。首先,属性值可能是null,在这种情况下is没有意义。

javabeans规范允许is作为特殊情况用于类型boolean,并且没有提到Boolean。假设这种特殊情况扩展到Boolean对象是无效的。

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

如果你想让它成为JavaBean,那么Marko Topolnik的答案是准确的。

否则就没有对错之分。应该使用get还是is(或其他什么)取决于合同和方法的目的。Eran的第一条评论是:

这里没有对错之分。我认为isMain、hasMain或supportsMain(取决于main的含义)更具描述性。我认为无论是布尔型还是布尔型都不应该有什么不同。

你问约定是什么,我想说约定是尽可能地描述和语义准确地命名方法。

详细说明vs得到

  • 如果该方法旨在作为大写B Boolean属性的通用访问器,该属性采用值null,则使用get更有意义。

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

Boolean对象上,可以应用许多方法:toStringequalsvalueOf。。

你的问题没有完整的答案,这实际上取决于用法和谁调用了这个方法。拥有是有意义的

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

但是,如果您的逻辑不能确保main可以具有null值,那么get是一个很好的前缀。

这是正确的。Boolean是基元数据类型Boolean的包装类。所以布尔值将返回对象。相同的get用于同样类似于基元数据类型的对象。

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

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

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

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

最新更新