理解java编译和继承

理解java编译和继承,java,inheritance,Java,Inheritance,我正在阅读JMHsamples,现在我在关于的部分。以下是他们的评论: 因为在编译过程中我们只知道类型层次结构,所以它是 仅在同一编译会话期间可能。也就是说,混入 在JMH之后扩展基准类的子类 汇编不会有任何效果 我还没有想到编译的这一方面,所以我觉得这一点不太清楚。不过我们可以用。例如: @Benchmark public abstract class MyBenchmark{ public void mb(){ doSome(); } public

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

因为在编译过程中我们只知道类型层次结构,所以它是 仅在同一编译会话期间可能。也就是说,混入 在JMH之后扩展基准类的子类 汇编不会有任何效果

我还没有想到编译的这一方面,所以我觉得这一点不太清楚。不过我们可以用。例如:

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

    public abstract doSome();
}
我认为在编译此类时,JHM使用注释处理器生成基准测试。然后如果我们试图编译一个子类

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

它没有效果,因为注释处理器没有任何要处理的内容。

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

例如,工作原理是相同的。下面是一幅演示其工作原理的图片(请记住,将Lombok替换为JMH):


阅读更多:

这是评论,不是问题。@MarkoTopolnik你什么意思?我只是被我们在编译过程中只知道类型层次结构弄糊涂了。这意味着什么?注释处理器在编译时运行,对吗?