我只是在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() 一切工作正常。
所以我这里确实有两个问题:
以“ is”开头的布尔属性名称是否不好?
无论它是好是坏,IntelliJ都没有通过自动生成名为 isDynamic 而不是 getIsDynamic 的方法来 犯错 吗?
敏感的话题,但 我认为 这是不好的。变量名称不应表示问题,而应表示语句。例如pageIsDynamic,dynamical或dynamicallyGenerated。但是,对此没有明确的编码约定。只要您在整个编码过程中保持一致,那么任何一种方式都不会造成太大的伤害。
pageIsDynamic
dynamical
dynamicallyGenerated
不,不是。该JavaBean规范规定,允许其前缀布尔getter方法的名称与is为好。通常在上面是首选get。与其他所有不错的IDE一样,IntellIJ也遵守此规范。Eclipse和Netbeans会做同样的事情。以下是第8.3.2章的摘录:
is
get
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);
此外,对于布尔属性,我们允许使用getter方法来匹配模式:
public boolean is<PropertyName>();
“is<PropertyName>”可以提供该方法代替“get<PropertyName>”方法,或者可以在“get<PropertyName>”方法之外提供该方法。
“is<PropertyName>”
“get<PropertyName>”
无论哪种情况,如果“is<PropertyName>”为布尔属性提供该“is<PropertyName>”方法,那么我们将使用该方法来读取属性值。布尔属性的示例可能是:
public boolean isMarsupial(); public void setMarsupial(boolean m);