3

我希望 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 接口的实现。类似于Foo::getProperty1Java 8 的东西。

public class Foo1Extractor implements Extractor<Foo> {
  public Object getProperty(Foo anObject) {
    return anObject.getProperty1();
  }
}

我应该使用JavaCompiler(目前我几乎没有要实现的接口并且可以使用模板类)还是你有更好的解决方案?

主要要求是短的字节码生成时间和 LGPL 兼容性(可用于商业产品)。

如果可能的话,为我的案例提供一个小例子。

4

1 回答 1

2

如果您用生成的类替换反射,您可能看不到明显的性能改进,除非您的应用程序每秒执行数百万次操作。此外,将动态代码生成添加到项目(运行时和编译时)的复杂性非常高。所以我建议只有在反射被证明是真正的瓶颈时才去做。

无论如何,对于 JDK 7 中编译时的代码生成,您可以使用注解处理 API,它基本上是 javac 的插件 API,您可以将其与某种模板引擎结合使用。看看这个项目,它使用注释处理的力量来做一些很好的事情。

于 2014-06-21T22:57:28.553 回答