一尘不染

Java:如何命名布尔属性

jsp

我只是在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()

有一次,我手动更换 isDynamic()getIsDynamic() 一切工作正常。

所以我这里确实有两个问题:

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

  2. 无论它是好是坏,IntelliJ都没有通过自动生成名为 isDynamic 而不是 getIsDynamic 的方法来 犯错 吗?


阅读 1301

收藏
2020-06-08

共1个答案

一尘不染

  1. 敏感的话题,但 我认为 这是不好的。变量名称不应表示问题,而应表示语句。例如pageIsDynamicdynamicaldynamicallyGenerated。但是,对此没有明确的编码约定。只要您在整个编码过程中保持一致,那么任何一种方式都不会造成太大的伤害。

  2. 不,不是。该JavaBean规范规定,允许其前缀布尔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);
2020-06-08