我希望Java 7具有Java 8的一个特性:方法的自动接口实现生成(以避免由于反射调用而导致的性能不足)。我知道Java 8在编译时提供了生成,但我认为Java 7不可能(不维护元数据文件)。所以我同意在运行时生成实现。
的例子:
我有以下接口:
public interface Extractor<E> {
public Object getProperty(E aSourceObject);
}
和bean类(或接口)
public class Foo {
public int getProperty1();
public String getProperty2();
public boolean getProperty3();
}
我需要为Foo的每个属性实现一个Extractor接口。例如Java 8的Foo::getProperty1
。
public class Foo1Extractor implements Extractor<Foo> {
public Object getProperty(Foo anObject) {
return anObject.getProperty1();
}
}
我应该使用JavaCompiler
(目前我有几个接口来实现,可以与模板类一起工作)还是你有更好的解决方案?
主要要求是短字节码生成时间和LGPL兼容性(可用于商业产品)。
如果可能的话,为我的案例提供一个小示例。
如果用生成的类替换反射,可能看不到明显的性能改进,除非应用程序每秒执行数百万个操作。此外,将动态代码生成添加到项目(在运行时和编译时)的复杂性也相当高。因此,我建议只有在证明反射是真正的瓶颈时才使用它。
无论如何,对于JDK 7编译时的代码生成,你可以使用注释处理API,它基本上是javac的插件API,你可以将它与某种模板引擎结合起来。看一下这个项目,它使用注释处理的功能来完成相当不错的工作。