我想要Java 8 for Java 7的一个特性:方法的自动接口实现生成(以避免由于反射调用而导致的性能缺陷)。我知道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接口的实现。类似于Java8的Foo::getProperty1。
public class Foo1Extractor implements Extractor<Foo> {
public Object getProperty(Foo anObject) {
return anObject.getProperty1();
}
}我应该使用JavaCompiler (目前我需要实现的接口很少,可以使用模板类),还是您有更好的解决方案?
主要需求是字节码生成时间短和LGPL兼容性(可用于商业产品)。
如果可能,请为我的案例提供一个小示例。
发布于 2014-06-22 06:57:29
如果用生成的类替换反射,您可能看不到明显的性能改进,除非您的应用程序每秒执行数百万次操作。此外,将动态代码生成添加到项目中的复杂性(无论是在运行时还是在编译时)都相当高。因此,我建议只有在反射被证明是真正的瓶颈时才去尝试它。
无论如何,对于JDK7中编译时的代码生成,您可以使用the annotation processing API,它基本上是一个用于javac的插件API,您可以将其与某种模板引擎相结合。看一看this项目,它使用注释处理的能力来做非常好的事情。
https://stackoverflow.com/questions/23990895
复制相似问题