Java:如何命名布尔属性

Noo*_*z42 16 java jsp el

我只是在Webapp中有一点惊喜,我在.jsp页面中使用EL.

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

<c:if test="${page.isDynamic}">
   ...
</c:if>
Run Code Online (Sandbox Code Playgroud)

我发现哪个更容易阅读:

<c:if test="${page.dynamic}">
   ...
</c:if>
Run Code Online (Sandbox Code Playgroud)

但是.jsp无法编译,错误如下:

javax.el.PropertyNotFoundException: Property 'isDynamic' not found on type com...
Run Code Online (Sandbox Code Playgroud)

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

isDynamic()
Run Code Online (Sandbox Code Playgroud)

代替:

getIsDynamic()
Run Code Online (Sandbox Code Playgroud)

一旦我通过getIsDynamic()手动替换了isDynamic(),一切都运行正常.

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

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

  2. 不管是不是坏了,IntelliJ是否通过自动生成名为isDynamic而不是getIsDynamic的方法犯了错误

Bal*_*usC 27

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

  2. 不,它没有.该JavaBean规范规定,它被允许使用的前缀布尔getter方法的名称is为好.通常以上是优选的get.与其他所有体面的IDE一样,IntellIJ只是坚持这个规范.Eclipse和Netbeans也会这样做.这是第8.3.2章的摘录:

8.3.2布尔属性

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

public boolean is<PropertyName>();
Run Code Online (Sandbox Code Playgroud)

“is<PropertyName>”可以提供该方法来代替“get<PropertyName>”方法,或者除了“get<PropertyName>”方法之外还可以提供该方法.

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

public boolean isMarsupial();
public void setMarsupial(boolean m);
Run Code Online (Sandbox Code Playgroud)

  • getter应该是例如`isDynamical()`而EL应该写成`$ {page.dynamical}`. (7认同)

小智 10

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

public boolean isDynamic() {
  return dynamic;
}
Run Code Online (Sandbox Code Playgroud)

在您的模板中,您可以使用:

<c:if test="${dynamic}">
 ...
</c:if>
Run Code Online (Sandbox Code Playgroud)