我注意到,对于返回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
值。还要注意,is
是get
的允许的替代方案,而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
对象上,可以应用许多方法:toString
、equals
、valueOf
。。
你的问题没有完整的答案,这实际上取决于用法和谁调用了这个方法。拥有是有意义的
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开头,因为它是一个对象