我对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未定义(并且不是接口).我发现很难相信这不受支持:我错过了什么吗?
解决方法
I find it hard to believe this is not supported: am I missing
something?
您尚未指出您正在使用哪个版本的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,一切正常.
我希望有所帮助.