【问题标题】:Generating getter in Intellij for a groovy class without a return statement在 Intellij 中为没有返回语句的 groovy 类生成 getter
【发布时间】:2019-02-25 15:35:42
【问题描述】:

我在 IntelliJ 中有一个 groovy 项目。我有一个类级别的属性,我正在尝试使用 (Command + N) 或 (Ctrl + N) 生成一个不带 return 语句的 getter 方法。

class MyClass {
  final String myProperty

  // generate the below getter from intelliJ
  String getMyProperty() {
    myProperty
  }
}

我也不能使用来自 groovy 的 @Immutable 注解,因为它不兼容,因为我必须声明一个空的构造函数,因为 POGO 被用作 Hibernate/JPA 的实体对象

【问题讨论】:

    标签: intellij-idea groovy


    【解决方案1】:

    创建 POGO 类时不需要获取器和设置器

    “在 Groovy 中编写 bean(通常称为 POGO(普通旧 Groovy 对象))时,您不必自己创建字段和 getter/setter,而是让 Groovy 编译器为您完成。”

    来源:http://groovy-lang.org/style-guide.html#_getters_and_setters

    所以

    class MyClass {
      String myProperty
    
      // generate the below getter from intelliJ
      String getMyProperty() {
        myProperty
      }
    }
    

    你只需要

    class MyClass {
      String myProperty
    }
    

    在字节码级别发生的情况是将字段 myProperty 编译为等效的 private String myProperty 并为您生成公共 getMyPropertysetMyProperty 方法。

    另一方面,return keyword is optional in Groovy。 IntelliJ IDEA 生成的方法是正确的。在这种情况下,返回 body 方法的最后一个表达式。

    【讨论】:

    • 是的,好点。我错过的一件事是我的 POGO 是不可变的,因此在 myProperty 中有一个 final 声明。我不能使用@Immutable groovy 注释,因为hibernate/jpa 不兼容,因为如果您声明最终参数,它需要一个空的构造函数。
    • 如果你的属性声明为final,Groovy 只会为你生成一个getter。
    猜你喜欢
    • 1970-01-01
    • 2014-12-20
    • 2016-10-06
    • 2019-03-24
    • 2011-06-06
    • 2021-12-14
    相关资源
    最近更新 更多