Java “的正确语法是什么?”;是";POJO类中的变量getter/setter?

Java “的正确语法是什么?”;是";POJO类中的变量getter/setter?,java,pojo,Java,Pojo,如果一个类包含一个名为“blah”的变量,那么标准的getter/setter语法显然是getBlah()和setBlah()。但如果我有一个名为isBlah的POJO类,我会使用: public type getIsBlah() { return isBlah; } public setIsBlah(type isBlah) { this.isBlah = isBlah; } 还是这样 public type isBlah() { return isBlah; } publi

如果一个类包含一个名为“blah”的变量,那么标准的getter/setter语法显然是getBlah()和setBlah()。但如果我有一个名为isBlah的POJO类,我会使用:

public type getIsBlah() {
  return isBlah;
}

public setIsBlah(type isBlah) {
  this.isBlah = isBlah;
}
还是这样

public type isBlah() {
  return isBlah;
}

public setBlah(type blah) {
  this.isBlah = blah;
}

第一种似乎更严格地遵守POJO约定,但第二种类型是IntelliJ生成的,如果我要求它生成一个类的getter/setter(嘿,IntelliJ从来没有让我失望过:)。那么,哪种语法是首选的呢?

不会说POJO有一个强大的约定,但是对于第二个(IntelliJ)示例,它是布尔属性的标准,其他所有语法都使用
getX
我也会选择第二个选项。第一,使用
getIsBlah()
似乎冗长而多余。

使用属性的一个原因是将API与实现解耦。换句话说,您不应该感到受私有变量的约束。除了努力使代码维护人员能够阅读命名之外,这不应该影响命名


我想说,如果“type”在本例中是
布尔的,那么第二种形式是正确的。如果它不是
boolean
,那么应该使用
getXXX
——但我可能不会使用
getIsXXX
。对我来说,“is”与布尔属性有很强的对应关系,在其他上下文中使用它不仅会破坏JavaBeans约定(这可能会影响其他工具),而且会误导我。

事实上,“get”和“is”都很好,因为它们在JavaBeans约定下在技术上仍然可以接受。我会选择听上去更好或更自然的,这取决于你的“废话”实际上是什么词。

如果你使用JSTL,“是”语法有一个大问题,那就是JSTL EL无法识别它们。这是相当愚蠢的,但是JSTLEL的设计者没有检查他们的逻辑是否符合javabeans


我经常发现自己在视图层类中编写getIsBlah()方法,这些类调用isBlah(),只是为了给JSTL一个钩子。这太可怕了。

请注意,字段的名称与名称完全无关。只有getter/setter的名称是相关的

通常getter的名称是
get()
。仅允许将
boolean
属性is
is()
作为替代选项

请注意,在您的示例中,当您调用getter
isBlah()
时,Bean属性名是“Blah”,当您调用getter
getIsBlah()
时,它是“isBlah”


就我个人而言,我通常更喜欢
isBlah()

JSTL只允许isMyBool,如果它是一个布尔值,而不是一个布尔值或任何其他对象,根据bean规范(原语vs对象)。

这个问题在最新的JSTL中仍然存在吗?我相信是这样的,虽然JSP EL的问题比JSTL本身的问题更大。我很确定情况已经不是这样了。@Vincent:我想你的意思是“+1,因为它会打破JavaBeans的约定”-而不是“+1-成为约定的破坏者!”:)