【问题标题】:What is the correct syntax for "is" variable getter/setters in a POJO class?POJO 类中“is”变量 getter/setter 的正确语法是什么?
【发布时间】:2009-07-13 08:24:26
【问题描述】:

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

【问题讨论】:

    标签: java pojo


    【解决方案1】:

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

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

    【讨论】:

    • @Vincent:我假设您的意思是“+1 提到它会破坏 JavaBeans 约定” - 而不是“+1 - 成为约定破坏者!” :)
    【解决方案2】:

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

    通常,getter 的名称是get<PropertyName>()。只有boolean 属性才允许使用is<PropertyName>() 作为替代。

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

    我个人通常更喜欢isBlah()

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • 最新的 JSTL 是否仍然存在此问题?
        • 我相信是这样,尽管 JSP EL 的问题比 JSTL 本身的问题更大。
        • 我很确定现在不是这样了。
        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

              猜你喜欢
              • 2011-10-05
              • 1970-01-01
              • 2014-06-17
              • 2015-02-28
              • 2017-05-21
              • 2015-02-07
              • 2015-03-29
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多