我在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()
我通过 getIsDynamic()手动更换 isDynamic()后,一切正常。
所以我在这里真的有两个问题:
使用“是”启动布尔属性的名称是不是很糟糕?
它是坏还是不行,IntelliJ在这里没有通过自动生成名为 isDynamic 的方法而不是 getIsDynamic ?
答案 0 :(得分:27)
敏感话题,但我认为很糟糕。变量名称不应表示问题,而应表示语句。例如。 pageIsDynamic
,dynamical
或dynamicallyGenerated
。然而,对此没有明确的编码约定。只要你在整个编码过程中保持一致,无论哪种方式都不会造成太大的伤害。
不,它没有。 Javabean specification表示允许使用is
为布尔getter方法名称加前缀。通常优先于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);
答案 1 :(得分:10)
isDynamic()通常是作为布尔getter的方式。
public boolean isDynamic() {
return dynamic;
}
您可以在模板中使用:
<c:if test="${dynamic}">
...
</c:if>
答案 2 :(得分:1)
更典型的是,在没有“是”的情况下命名属性,并让访问者拥有“是”。您当然可以更改IDE生成的内容,并且如果您更清楚,则将“getIsDynamic()”作为访问者。
答案 3 :(得分:1)
因为在Java中你没有变量名和方法之间的冲突,所以如果isDynamic()
是isDynamic
,那么可以使用true
方法返回。或者至少这是好的,如果“dinamicity”实际上是对象的真实属性而不仅仅是你需要的布尔值。
例如verbose
是一个布尔值,通常不是对象的属性,因此使用isVerbose()
方法是个坏主意(除非它是Console
类)。
拥有一个名为isDynamic
的布尔值是一个很好的表达思想。它建议您变量是bool
而无需任何额外的努力。