Groovy特征是否支持与Java的联合编译



我对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版本,并且在某些时候可能存在错误,但是您的问题的答案是它受支持。

请参阅 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,一切正常。

我希望这有所帮助。

最新更新