首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解java编译和继承

理解java编译和继承
EN

Stack Overflow用户
提问于 2016-11-08 10:24:42
回答 1查看 137关注 0票数 1

我正在阅读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。示例:

代码语言:javascript
复制
@Benchmark
public abstract class MyBenchmark{
    public void mb(){
        doSome();
    }

    public abstract doSome();
}

我认为在编译这个类时,JHM使用注释处理器进行基准测试生成。然后,如果我们试图编译一个子类,比如

代码语言:javascript
复制
public class MyConcreteBenchmark extends MyBenchmark {
    @Override
    public void doSome(){
        //Do some
    }
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-08 10:37:17

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

例如,隆伯克的工作方式是相同的。下面的图片演示了它的工作原理(只需用JMH替换Lombok ):

Readmore:项目Lombok:创建自定义转换

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40484495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档