2016-11-08 74 views
1

我在閱讀JMH示例,現在我在關於inheritance的部分。這裏是他們做了一句話:瞭解java編譯和繼承

因爲我們只編譯期間知道是什麼類型的層次結構,它是相同的編譯會話期間 纔有可能。也就是說,在 中混合擴展您的基準類後的子類 JMH 編譯將不起作用。

我還沒有想到這方面的編譯,所以這似乎不是很清楚。但我們可以使用Class::getSuperClass。例如:

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

    public abstract doSome(); 
} 

我認爲編譯這個類時,JHM使用註釋處理器進行基準生成。然後如果我們試圖編譯一個子類,說

public class MyConcreteBenchmark extends MyBenchmark { 
    @Override 
    public void doSome(){ 
     //Do some 
    } 
} 

它不起作用,因爲註釋處理器沒有任何處理。

+0

這是評論,而不是問題。 –

+0

@MarkoTopolnik你是什麼意思?我只是被**弄糊塗了,我們在編譯期間只知道類型層次**。它應該是什麼意思? –

+0

註釋處理器在編譯時運行,對嗎? –

回答

2

JHM來編譯(分析和生成)之前。像預處理器或預編譯器。 因此,jmh無法看到繼承樹,並且無法看到繼承的註釋。例如

Lombock例如以相同的方式工作。這裏是一個形象展示它是如何工作(只記龍目島替代由江鈴控股有限公司):

enter image description here

Readmore:Project Lombok: Creating Custom Transformations