【问题标题】:Groovy traits in java classesJava 类中的 Groovy 特征
【发布时间】:2016-01-20 23:37:02
【问题描述】:

我正在开发现有的 java 代码库,但我已说服团队使用交叉编译,以便可以在 groovy 中完成新开发,同时仍使用旧代码库。两全其美,风险低,收益多等。

我正在尝试解决一个问题,该问题可以通过 Groovy 的 trait 功能完美处理,但它必须与现有的 java 类或仍想用 java 编写的开发人员的新类一起使用。

在java中做class duck implements FlyingAbility {会抛出一个关于实现的错误,而IntelliJ的automatix修复是在java类中实现trait中的所有方法,就好像它只是一个接口一样。

有没有办法让特性在 java 类中使用特性,就像它们在 groovy 类中的工作方式一样?

【问题讨论】:

  • Java 8 默认方法怎么样?
  • Java 8 的默认方法可以工作,但我们希望这个项目中的所有新代码都使用 groovy,因此默认方法更像是 C 计划。
  • 你能在 Groovy 类中实现 trait,然后在 Java 中扩展 Groovy 类吗?

标签: java groovy traits


【解决方案1】:

您不能在 Java 类中使用特征。 Groovy 特征被实现为它们所应用的类的编译时转换,Java 类不通过 Groovy 编译器。

也就是说,it's usually very simple to convert Java code to Groovy,并将@CompileStatic 添加到类中通常会生成与等效 Java 差不多的代码,尽管(目前)具有稍大的 .class 文件。

【讨论】:

    【解决方案2】:

    如果您只需要使用一个特征,您可以在 Groovy 中创建一个代理类,即

    GroovyTrait.groovy

    trait GroovyTrait {
    }
    

    GroovyClass.groovy

    class GroovyClass implements GroovyTrait {
    }
    

    JavaClass.java

    class JavaClass extends GroovyClass {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-04
      • 1970-01-01
      • 2016-08-11
      • 2015-05-05
      • 2015-05-26
      • 2016-02-19
      相关资源
      最近更新 更多