3

Java 7 用の Java 8 の機能の 1 つが必要です: メソッドの自動インターフェイス実装生成 (リフレクション呼び出しによるパフォーマンスの低下を避けるため)。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 に答える