我正在阅读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
}
}
它没有效果,因为注释处理器无需处理。
答案 0 :(得分:2)
JHM在编译(分析和生成)之前出现。像预处理器或预编译器之类的东西。 因此,jmh无法看到继承树,也无法看到继承的注释。
例如,Lombock以相同的方式工作。这是一个展示它如何工作的图像(只需用JMH代替Lombok):