使用Eclipse实现布尔类型的Getter和Setter

6
我想知道为什么在使用以下布尔值时,eclipse会生成以下getter和setter方法:
boolean isLifeTimeMember

Image

getter应该是isIsLifeTimeMember()而不是isLifeTimeMember()

我认为这会影响在JSP中调用变量isLifeTimeMember,因为它将查找JSP并映射到isIsLifeTimeMember() getter方法。

由于getter生成器在eclipse中为isLifeTimeMember(),所以会导致错误,因为没有isIsLifeTimeMember()方法。

谢谢。


如果您从JSP中调用它,则getter应该是getIsLifeTimeMember()。在JSP中,假定已经使用了Get。 - Makoto
请不要上传图片,直接将代码粘贴在这里。 - Rohit Jain
我猜你的意思是代码是 boolean isLifeTimeMember; 而不是 boolean isLifeTimeMember()。Eclipse 不会为方法生成 getter 和 setter! - Ted Hopp
@Makoto:这两个生成的方法在 JSP 中也应该可以正常工作(可能需要将 EL 设置为 x.lifeMember = true,不过前缀可以省略)。 - Thilo
2个回答

17

Eclipse名称生成规则要求布尔型getter方法应以is开头。如果变量名已经以is开头,那么Eclipse认为不需要额外的前缀。

Eclipse有一个设置,用于控制生成的布尔型getter是否使用is前缀。打开首选项并导航到Java > 代码风格。在那里,您可以取消选中选项“对返回布尔值的getter使用'is'前缀”。然后,由Eclipse生成的布尔型getter将以"get"开头,就像所有其他getter一样。

顺便说一下,Java中拥有相同名称的字段和方法是没有问题的。

但是,具有以"is"开头的属性名称可能会导致jsp出现问题。如此线程所述,最好避免属性名称读起来像问题(比如isLifeTimeMember),而是直接使用属性本身作为属性名称(lifeTimeMember)。

代码示例:

boolean lifeTimeMember;

public boolean isLifeTimeMember() {
   return lifeTimeMember;
}

public void setLifeTimeMember(boolean lifeTimeMember) {
   this.lifeTimeMember = lifeTimeMember;
}

如果您在JSP中需要使用此变量,只需使用变量名称"lifeTimeMember"。


当我调用<s:if test="isLifeTimeMember">时,会影响我的JSP吗? - newbie
@新手 - 这可能会引起问题。如此讨论所述,最好避免使用类似问题的jsp属性名称(isLifeTimeMember),而是直接使用属性本身作为属性名称(lifeTimeMember)。 - Ted Hopp
@MukulGoel - 你看到我刚才在你上面的评论了吗? - Ted Hopp
是的,我看到了,但你的帖子仍然反映了旧答案。 - Mukul Goel
@MukulGoel - 不再需要了。顺便说一下,旧答案与评论并不矛盾。但我澄清了我想表达的观点。 - Ted Hopp
JSP已死。IS回来了。Eclipse应相应更新。 - java-addict301

2

当变量为布尔类型时,Eclipse会在变量名前添加is来形成相应的getter方法名称。例如,如果变量名为boolean present;,则生成的getter方法名将为isPresent();

不建议在变量名中使用is

如果变量名为ispresent,在JSP中您将通过变量名ispresent进行查找,它又会查找其getter方法,因为它是布尔类型,所以假设getter方法名为isispresemt();,但这个方法并不存在,因为在变量名中已经存在is,Eclipse在生成getter/setter方法时不会再次添加。

因此,预计会抛出异常could not find the field ispresent

在字段名中使用is可能会导致问题,请避免使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接