2016-11-08 5 views
1

私はJMHサンプルを読んでいますが、今度は約inheritanceのセクションにあります。ここで彼らが作った発言は次のとおりです。Javaコンパイルと継承の理解

我々は唯一のコンパイル時の型階層を知っているので、それは同じコンパイルセッション中 のみ可能です。つまり、 ベンチマーククラスを拡張するサブクラスの中で、のJMH コンパイル後には何の効果もありません。

私はこの編集の側面について考えていないので、これは私にとっては明らかではないようです。我々はClass::getSuperClassを使用することができます。例:

@Benchmark 
public abstract class MyBenchmark{ 
    public void mb(){ 
     doSome(); 
    } 

    public abstract doSome(); 
} 

このクラスをコンパイルするとき、JHMはベンチマーク生成にアノテーションプロセッサを使用すると考えました。そして、サブクラスをコンパイルしようとすると、アノテート・プロセッサに何も処理がないので、サブクラスをコンパイルしようとすると、何の効果もありません。

+0

これはコメントではなく、質問です。 –

+0

@MarkoTopolnikどういう意味ですか? **私はちょうど混乱していました**コンパイル中のタイプ階層を知っています**。それはどういう意味ですか? –

+0

注釈プロセッサはコンパイル時に実行されます。 –

答えて

2

JHMは、コンパイルする前に(分析して生成する)来ます。プリプロセッサやプリコンパイラのようなもの。 したがって、jmhは継承ツリーを見ることができず、継承されたアノテーションを見ることはできません。

Lombockは、同じように動作します。ここでは、それがどのように機能するかを実証した画像は、(ちょうどJMHによって心ロンボク島で置き換える)である:

enter image description here

Readmore:Project Lombok: Creating Custom Transformations