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

时间:2009-07-13 08:24:27

标签: 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;
}

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

第一种似乎更符合POJO惯例,但第二种类型是IntelliJ生成的,如果我要求它创建一个类'getter / setters(嘿,IntelliJ从来没有让我失望:])。那么首选语法是什么?

8 个答案:

答案 0 :(得分:20)

使用属性的一个原因是将API与实现分离。换句话说,您不应该受到调用私有变量的束缚。除了试图保持代码维护者可读之外,这不应该告知命名。

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

答案 1 :(得分:4)

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

通常,getter的名称为get<PropertyName>()。仅boolean属性允许is<PropertyName>()作为替代。

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

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

答案 2 :(得分:3)

不会说POJO有一个强大的约定,但对于JavaBeans,第二个(IntelliJ)示例是布尔属性的标准,其他所有内容都使用getX

答案 3 :(得分:3)

如果您使用JSTL,那么“is”语法会出现一个大问题,即JSTL EL无法识别它们。这是非常愚蠢的,但JSTL EL的设计者并没有费心去检查他们遵守javabeans的逻辑。

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

答案 4 :(得分:2)

我也会选择你的第二个选择。第一个,getIsBlah()似乎有点冗长。

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

答案 7 :(得分:0)

这意味着JAXB会生成错误的代码。它创建Boolean属性,因为它们需要可以为空,但仍然命名它们的getter isXXX(),这违反了Bean规范。