Eclipse中有一个选项(首选项-> Java->代码样式)
如果返回值是布尔值,它允许 getter 使用 "is" 前缀。
我的问题是,如果返回的是包装类(布尔值),为什么它不做前缀?
这仅仅是因为根据Java bean 规范/约定/实现,前缀仅适用于原始对象。
你可以看一下PropertyDescriptor类源码(getRealMethod):
if (readMethodName == null) {
Class type = getPropertyType0();
if (type == boolean.class || type == null) {
readMethodName = "is" + getBaseName();
} else {
readMethodName = "get" + getBaseName();
}
}
所以eclipse只符合这个。
编辑:现在为什么以这种方式制作属性描述符是另一个问题,可能Java人员认为null返回类型和“is”前缀的可能性可能会产生误导。
boolean是原始类型,Boolean是对象。除了true或false之外,对象还有其他属性。所以也许这就是他们只为原始类型设计它的原因。
如果有一个名为isActive的 getter ,您会希望它返回true或false,而不是null或其他任何东西。
在原始类型boolean
中,只有true
和false
是可能的。但如果您使用 Object 类型Boolean
,null
也可以接受。通常不适合这种场景。
public class MyClass{
private boolean status;
private Boolean sts;
public boolean isStatus(){
return status;
}
public Boolean getSts(){
return sts;
}
// setters
}
当我们称isStatus
结果为真或假时。这是有道理的。但isSts
可以退货null
。这有些不合逻辑。这可能是使用 get 作为Object
类型的原因。
当为属性建立了 getter 和 setter 命名约定的isFoo/setFoo特例时,Boolean被认为与所有其他对象类型的关系比与boolean原始类型更密切相关;getFoo的结果可以为 null,isFoo 的结果不能。
现在 Java 语言具有基本类型的自动装箱和拆箱,布尔变量与布尔属性交互的可能性更大,但布尔属性仍然不寻常,因为将它们设置为 null 仍然是一个奇怪且通常很麻烦的用例。