【发布时间】:2014-06-22 07:09:41
【问题描述】:
我希望 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兼容性(可用于商业产品)。
如果可能,请为我的情况提供一个小例子。
【问题讨论】:
-
顺便说一句:虽然这使用了反射,因此可能无法满足您的性能要求,但“动态代理类”通常可以巧妙地用于解决此任务docs.oracle.com/javase/8/docs/technotes/guides/reflection/…