代码之家  ›  专栏  ›  技术社区  ›  NoozNooz42

Java:如何命名布尔属性

  •  16
  • NoozNooz42  · 技术社区  · 14 年前

    我刚刚在一个webapp中有了一个小小的惊喜,我正在使用el-in.jsp页面。

    我添加了一个布尔属性并挠头,因为我将布尔属性命名为“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...
    

    我发现在生成getter时,我的IDE生成了一个名为:

    isDynamic()
    

    而不是:

    getIsDynamic()
    

    一旦我手动更换 IS-动态() 通过 动态() 一切正常。

    所以我有两个问题:

    1. 以“is”开头布尔属性的名称是否不好?

    2. 不管它是坏的还是坏的,Intellij没有在这里通过自动生成一个名为 等动态的 而不是 运动动力学 ?

    4 回复  |  直到 14 年前
        1
  •  27
  •   BalusC    14 年前
    1. 敏感主题,但在 我的意见 这很糟糕。变量名不应表示问题,而应表示语句。例如。 pageIsDynamic , dynamical dynamicallyGenerated . 然而,没有明确的编码约定。只要您在整个编码过程中保持一致,任何一种方式都不会造成太大的伤害。

    2. 不,不是的。 Javabean specification 声明允许它在布尔getter方法名称前面加上前缀 is 也。通常在上面比较好 get . 与其他所有体面的IDE一样,Intellij只遵循此规范。Eclipse和Netbeans也会这样做。以下是第8.3.2章的摘录:

    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);
    
        2
  •  10
  •   André van Toly    14 年前

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

    public boolean isDynamic() {
      return dynamic;
    }
    

    在模板中,可以使用:

    <c:if test="${dynamic}">
     ...
    </c:if>
    
        3
  •  1
  •   Greg Charles    14 年前

    将属性命名为不带“is”且让访问器具有“is”更为典型。当然,您可以更改您的IDE生成的内容,并让“getisdynamic()”作为访问器(如果这对您来说更清楚的话)。

        4
  •  1
  •   Jack    14 年前

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

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

    有一个布尔值 等动态的 是一个很好的表达方式。它表明变量是 bool 没有任何额外的努力。