15

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

4

7 回答 7

20

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

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

于 2009-07-13T08:31:31.610 回答
4

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

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

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

我个人通常更喜欢isBlah().

于 2009-07-13T08:42:06.160 回答
3

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

于 2009-07-13T08:28:05.737 回答
3

如果使用 JSTL,“is”语法存在一个大问题,即 JSTL EL 无法识别它们。这很愚蠢,但是 JSTL EL 的设计者并没有费心检查他们的逻辑是否符合 javabeans。

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

于 2009-07-13T08:40:06.383 回答
2

我也会选择你的第二个选项。第一个, withgetIsBlah()似乎冗长而冗长。

于 2009-07-13T08:29:10.100 回答
1

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

于 2009-07-13T08:36:59.010 回答
0

根据 bean 规范,JSTL 仅允许 isMyBool 是布尔值,而不是布尔值或任何其他对象。(原始与对象)。

于 2010-06-22T02:25:45.030 回答