Eclipse - 生成Getters / Setters

时间:2013-09-26 08:51:05

标签: java eclipse

Eclipse中有一个选项(首选项 - > Java->代码样式)

如果返回值为布尔值,它允许getter的“is”前缀。

我的问题为什么如果返回是包装类(布尔值),它不会做前缀?

4 个答案:

答案 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中,只有truefalse是可能的。但是如果您使用对象类型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仍然是一个奇怪且通常很麻烦的用例。