Java:如何命名布尔属性

2022-09-02 23:35:22

我只是在Web应用程序中有一点惊喜,我在.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...

事实证明,在生成 getter 时,我的 IDE(我花了一些时间才注意到它)生成了一个名为:

isDynamic()

而不是:

getIsDynamic()

一旦我手动将isDynamic()替换为getIsDynamic(),一切都很好。

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

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

  2. 无论它是否糟糕,IntelliJ不是在这里犯了一个错误,自动生成一个名为isDynamic而不是getIsDynamic的方法吗


答案 1
  1. 敏感的主题,但在我看来,这是不好的。变量名称不应表示问题,而应表示语句。例如,或 .但是,没有明确的编码约定。只要您在整个编码过程中保持一致,无论哪种方式都不会造成太大的伤害。pageIsDynamicdynamicaldynamicallyGenerated

  2. 不,它没有。Javabean 规范指出,它也允许在布尔 getter 方法名称前面加上前缀。它通常优于上面 。像其他所有像样的IDE一样,IntellIJ只是遵循这个规范。Eclipse和Netbeans也会做同样的事情。以下是第8.3.2章的摘录:isget

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

isDynamic() 通常是作为布尔 getter 的必经之路。

public boolean isDynamic() {
  return dynamic;
}

在模板中,您可以使用:

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