【问题标题】:Do Groovy traits support joint compilation with Java?Groovy 特征是否支持与 Java 的联合编译?
【发布时间】:2014-11-26 22:20:29
【问题描述】:

我对 Groovy 中的特征感到非常兴奋,但我无法让它们通过联合编译来工作。示例:

Bird.groovy:

trait FlyingAbility {
  String fly() { "I'm flying!" }
}

class Bird implements FlyingAbility {}

JavaClass.java:

public class JavaClass {
  public static void main(String[] args) {
    Bird b = new Bird();
    // FlyingAbility f = new Bird();
  }
}

生成的存根是:

public class Bird
  extends java.lang.Object  implements
    FlyingAbility {
;
public  groovy.lang.MetaClass getMetaClass() { return (groovy.lang.MetaClass)null;}
public  void setMetaClass(groovy.lang.MetaClass mc) { }
public  java.lang.Object invokeMethod(java.lang.String method, java.lang.Object arguments) { return null;}
public  java.lang.Object getProperty(java.lang.String property) { return null;}
public  void setProperty(java.lang.String property, java.lang.Object value) { }
}

这导致 java 编译器抱怨 FlyingAbility 没有定义(并且不是接口)。我很难相信这不受支持:我错过了什么吗?

【问题讨论】:

  • 如果这在最新的 Groovy 版本中不起作用,请提出 Groovy 问题。这不太可能由您自己解决。
  • 你用什么编译?
  • 我在 IntelliJ IDEA 14 的交叉编译中遇到了同样的问题。

标签: java groovy traits


【解决方案1】:

我很难相信这不受支持:我错过了吗 什么?

您尚未指明您使用的是哪个版本的 Groovy,并且在某些时候可能存在错误,但您的问题的答案是它受支持。

https://github.com/jeffbrown/traitandjava 上查看该项目。相关文件为:

https://github.com/jeffbrown/traitandjava/blob/master/src/main/groovy/demo/FlyingAbility.groovy

https://github.com/jeffbrown/traitandjava/blob/master/src/main/groovy/demo/Bird.groovy

https://github.com/jeffbrown/traitandjava/blob/master/src/main/groovy/demo/BirdKeeper.java

https://github.com/jeffbrown/traitandjava/blob/master/src/test/groovy/demo/BirdKeeperSpec.groovy

该项目使用的是 Groovy 2.4.4,并且一切正常。

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    相关资源
    最近更新 更多