了解java编译和继承

时间:2016-11-08 10:24:43

标签: java inheritance

我正在阅读JMH个样本,现在我正在关于inheritance的部分。以下是他们的评论:

  

因为 我们只知道编译期间的类型层次结构 ,它是   只能在同一个编译会话期间使用。也就是说,混入   在 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
    }
}

它没有效果,因为注释处理器无需处理。

1 个答案:

答案 0 :(得分:2)

JHM在编译(分析和生成)之前出现。像预处理器或预编译器之类的东西。 因此,jmh无法看到继承树,也无法看到继承的注释。

例如,

Lombock以相同的方式工作。这是一个展示它如何工作的图像(只需用JMH代替Lombok):

enter image description here

Readmore:Project Lombok: Creating Custom Transformations