Eclipse中有一个选项(首选项 - > Java->代码样式)
如果返回值为布尔值,它允许getter的“is”前缀。
我的问题为什么如果返回是包装类(布尔值),它不会做前缀?
答案 0 :(得分:9)
这只是因为根据 java bean规范/约定/实现,前缀仅适用于原始对象。
您可以查看PropertyDescriptor类源(getRealMethod):
if (readMethodName == null) {
Class type = getPropertyType0();
if (type == boolean.class || type == null) {
readMethodName = "is" + getBaseName();
} else {
readMethodName = "get" + getBaseName();
}
}
所以日食只符合这一点。
编辑:现在为什么以这种方式制作属性描述符是另一个问题,可能Java人员认为null返回类型和“is”前缀的可能性可能会产生误导。
答案 1 :(得分:2)
布尔是基本类型,布尔是对象。除了 true 或 false 之外,对象还有其他属性。所以也许这就是他们为原始类型设计它的原因。
如果有一个名为 isActive 的getter,您会希望它返回 true 或 false ,而不是 null 或其他任何事情。
答案 2 :(得分:0)
在原始类型boolean
中,只有true
和false
是可能的。但是如果您使用对象类型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
类型的原因。
答案 3 :(得分:0)
当 isFoo / setFoo 建立了属性的getter和setter命名约定的特殊情况时,布尔被认为与所有其他对象类型的关系比与布尔基元类型; getFoo 的结果可以为null, isFoo 的结果不能。
现在Java语言具有原始类型的自动装箱和拆箱功能,布尔变量与布尔属性交互的可能性更大,但布尔值属性仍然不常见,因为将它们设置为null仍然是一个奇怪且通常很麻烦的用例。