【问题标题】:java runtime class generation frameworksjava运行时类生成框架
【发布时间】: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兼容性(可用于商业产品)。

如果可能,请为我的情况提供一个小例子。

【问题讨论】:

标签: java java-compiler-api


【解决方案1】:

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

无论如何,对于 JDK 7 中编译时的代码生成,您可以使用 the annotation processing API,它基本上是 javac 的插件 API,您可以将其与某种模板引擎结合使用。看看this 项目,它使用注释处理的强大功能来完成相当不错的工作。

【讨论】:

  • 我的预测也告诉我,我不应该遇到任何性能瓶颈。即使是我们客户的旧电脑。所以我们暂停了这个项目。
猜你喜欢
  • 2013-11-24
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-20
相关资源
最近更新 更多