如果一个类包含一个名为“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从来没有让我失望:])。那么首选语法是什么?
答案 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规范。