Groovy java 中的特征 类
Groovy traits in java classes
我正在开发现有的 java 代码库,但已说服团队使用交叉编译,以便可以在 groovy 中完成新开发,同时仍使用旧代码库。两全其美,风险低,收益多等
我有一个问题正在尝试解决,Groovy 的 trait 功能完美地解决了这个问题,但它必须与现有的 java classes 或新的一起使用那些仍然想写在 java.
中的开发人员
在 java 中执行 class duck implements FlyingAbility {
会引发有关实现的错误,而 IntelliJ 的 automatix 修复是在 java class 中实现特征中的所有方法,好像它只是一个界面。
有没有办法让特征在 java classes 中使用特征,就像它们在 groovy classes 中的工作方式一样?
您不能在 Java class 中使用特征。 Groovy traits 被实现为 compile-time 对其应用的 class 的转换,并且 Java classes 不通过 Groovy编译器。
也就是说,it's usually very simple to convert Java code to Groovy 并将 @CompileStatic
添加到 class 通常生成的代码的性能与等效的 Java 大致相同,尽管(目前)大一点的 .class
文件。
如果您只需要使用一个特征,您可以在 Groovy 中创建一个代理 class 即
GroovyTrait.groovy
trait GroovyTrait {
}
GroovyClass.groovy
class GroovyClass implements GroovyTrait {
}
JavaClass.java
class JavaClass extends GroovyClass {
}
我正在开发现有的 java 代码库,但已说服团队使用交叉编译,以便可以在 groovy 中完成新开发,同时仍使用旧代码库。两全其美,风险低,收益多等
我有一个问题正在尝试解决,Groovy 的 trait 功能完美地解决了这个问题,但它必须与现有的 java classes 或新的一起使用那些仍然想写在 java.
中的开发人员在 java 中执行 class duck implements FlyingAbility {
会引发有关实现的错误,而 IntelliJ 的 automatix 修复是在 java class 中实现特征中的所有方法,好像它只是一个界面。
有没有办法让特征在 java classes 中使用特征,就像它们在 groovy classes 中的工作方式一样?
您不能在 Java class 中使用特征。 Groovy traits 被实现为 compile-time 对其应用的 class 的转换,并且 Java classes 不通过 Groovy编译器。
也就是说,it's usually very simple to convert Java code to Groovy 并将 @CompileStatic
添加到 class 通常生成的代码的性能与等效的 Java 大致相同,尽管(目前)大一点的 .class
文件。
如果您只需要使用一个特征,您可以在 Groovy 中创建一个代理 class 即
GroovyTrait.groovy
trait GroovyTrait {
}
GroovyClass.groovy
class GroovyClass implements GroovyTrait {
}
JavaClass.java
class JavaClass extends GroovyClass {
}