如何读取java类的注释?

利用jdk的tools.jar提供的接口,便可轻松获取java类的文档注释。

如类、构造方法、普通方法、成员属性等,都可以获得其注释相关信息。

1.添加依赖

<dependency>
    <groupId>com.sun</groupId>
    <artifactId>tools</artifactId>
    <version>1.8</version>
    <scope>system</scope>
    <systemPath>${java.home}/../lib/tools.jar</systemPath>
</dependency>

2.使用示例

import cn.hutool.core.util.ReflectUtil;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.FieldDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.RootDoc;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 获取某一个java文件代码中属性对应的注释
 *
 */
public class Doclet {

    public static Logger logger = LoggerFactory.getLogger(Doclet.class);

    private static RootDoc rootDoc;
    private final String clsFilePath;

    // 必须要有,且必须如下定义
    public static boolean start(RootDoc root) {
        rootDoc = root;
        return true;
    }

    public Doclet(String clsFilePath) {
        this.clsFilePath = clsFilePath;
    }

    public void exec() {
        com.sun.tools.javadoc.Main.execute(
                new String[]{"-doclet", Doclet.class.getName(),
                        "-docletpath", Doclet.class.getResource("/").getPath(),
                        "-encoding", "utf-8",
                        clsFilePath});
        ClassDoc[] classes = rootDoc.classes();

        if (classes == null || classes.length == 0) {
            logger.warn(clsFilePath + " 无ClassDoc信息");
            return;
        }

        ClassDoc classDoc = classes[0];
        // 获取类的名称
        System.err.println("类名:" + classDoc.name());
        // 获取类的注释
        String classComment = ReflectUtil.getFieldValue(classDoc, "documentation").toString();
        System.err.println("类注释:" + classComment);
        // 获取属性名称和注释
        for (FieldDoc field : classDoc.fields(false)) {
            System.err.printf("属性名:%s, 属性类型:%s, 注释:%s%n", field.name(), field.type().typeName(), field.commentText());
        }

        for (MethodDoc method : classDoc.methods(false)) {
            System.err.printf("方法名:%s, 方法返回类型:%s, 注释:%s%n", method.name(), method.returnType().typeName(), method.commentText());
        }
    }


    public static void main(String[] args) {

        Doclet doclet = new Doclet(
                "E:\\git\\DLMS\\dlms\\dlms-option\\dlms-option-prevent-duplicate\\src\\main\\java\\com\\gynsh\\prevent\\annotation\\PreventDuplicate.java");
        doclet.exec();
    }
}

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流沙QS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值