我正在阅读JMH示例,现在我正在阅读关于http://hg.openjdk.java.net/code-tools/jmh/file/cb9aa824b55a/jmh-samples/src/main/java/org/openjdk/jmh/samples/JMHSample_24_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
}
}它没有效果,因为注释处理器没有任何要处理的东西。
发布于 2016-11-08 10:37:17
JHM是在编译(分析和生成)之前出现的。类似于预处理器或预编译器。因此,jmh不能看到继承树,也不可能看到继承的注释。
例如,隆伯克的工作方式是相同的。下面的图片演示了它的工作原理(只需用JMH替换Lombok ):

Readmore:项目Lombok:创建自定义转换
https://stackoverflow.com/questions/40484495
复制相似问题