Java:如何命名布尔属性

时间:2010-05-31 17:27:01

标签: java jsp el

我在Webapp中有点意外,我在.jsp页面中使用EL。

我添加了一个布尔属性并抓住了我的头,因为我已经命名了一个布尔“isDynamic”,所以我可以这样写:

<c:if test="${page.isDynamic}">
   ...
</c:if>

我觉得比以下更容易阅读:

<c:if test="${page.dynamic}">
   ...
</c:if>

然而.jsp无法编译,错误:

javax.el.PropertyNotFoundException: Property 'isDynamic' not found on type com...

我发现我的IDE(我花了一些时间注意它),在生成getter时,生成了一个名为的方法:

isDynamic()

而不是:

getIsDynamic()

我通过 getIsDynamic()手动更换 isDynamic()后,一切正常。

所以我在这里真的有两个问题:

  1. 使用“是”启动布尔属性的名称是不是很糟糕?

  2. 它是坏还是不行,IntelliJ在这里没有通过自动生成名为 isDynamic 的方法而不是 getIsDynamic

4 个答案:

答案 0 :(得分:27)

  1. 敏感话题,但我认为很糟糕。变量名称不应表示问题,而应表示语句。例如。 pageIsDynamicdynamicaldynamicallyGenerated。然而,对此没有明确的编码约定。只要你在整个编码过程中保持一致,无论哪种方式都不会造成太大的伤害。

  2. 不,它没有。 Javabean specification表示允许使用is为布尔getter方法名称加前缀。通常优先于get以上。与其他所有体面的IDE一样,IntellIJ只是坚持这个规范。 Eclipse和Netbeans也会这样做。以下是第8.3.2章的摘录:

  3.   

    8.3.2布尔属性

         

    此外,对于布尔属性,我们允许getter方法匹配模式:

    public boolean is<PropertyName>();
    
         

    可以提供此“is<PropertyName>”方法而不是“get<PropertyName>”方法,   或者除了“get<PropertyName>”方法之外,还可以提供它。

         

    在任何一种情况下,如果布尔属性存在“is<PropertyName>”方法,那么我们将使用“is<PropertyName>”方法来读取属性值。   布尔属性的示例可能是:

    public boolean isMarsupial();
    public void setMarsupial(boolean m);
    

答案 1 :(得分:10)

isDynamic()通常是作为布尔getter的方式。

public boolean isDynamic() {
  return dynamic;
}
您可以在模板中使用

<c:if test="${dynamic}">
 ...
</c:if>

答案 2 :(得分:1)

更典型的是,在没有“是”的情况下命名属性,并让访问者拥有“是”。您当然可以更改IDE生成的内容,并且如果您更清楚,则将“getIsDynamic()”作为访问者。

答案 3 :(得分:1)

因为在Java中你没有变量名和方法之间的冲突,所以如果isDynamic()isDynamic,那么可以使用true方法返回。或者至少这是好的,如果“dinamicity”实际上是对象的真实属性而不仅仅是你需要的布尔值。

例如verbose是一个布尔值,通常不是对象的属性,因此使用isVerbose()方法是个坏主意(除非它是Console类)。

拥有一个名为isDynamic的布尔值是一个很好的表达思想。它建议您变量是bool而无需任何额外的努力。