5

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

如果返回值是布尔值,它允许 getter 使用 "is" 前缀。

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

4

4 回答 4

9

这仅仅是因为根据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”前缀的可能性可能会产生误导。

于 2013-09-26T09:07:55.053 回答
2

boolean是原始类型,Boolean是对象。除了truefalse之外,对象还有其他属性。所以也许这就是他们只为原始类型设计它的原因。

如果有一个名为isActive的 getter ,您会希望它返回truefalse,而不是null或其他任何东西。

于 2013-09-26T08:53:21.323 回答
0

在原始类型boolean中,只有truefalse是可能的。但如果您使用 Object 类型Booleannull也可以接受。通常不适合这种场景。

  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类型的原因。

于 2013-09-26T08:57:28.077 回答
0

当为属性建立了 getter 和 setter 命名约定的isFoo/setFoo特例时,Boolean被认为与所有其他对象类型的关系比与boolean原始类型更密切相关;getFoo的结果可以为 null,isFoo 的结果不能

现在 Java 语言具有基本类型的自动装箱和拆箱,布尔变量与布尔属性交互的可能性更大,但布尔属性仍然不寻常,因为将它们设置为 null 仍然是一个奇怪且通常很麻烦的用例。

于 2013-09-26T09:08:10.607 回答