You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java注解处理器无法读取注解类参数上的注解该如何解决

问题根因

你遇到的问题核心是调用对象错误:TypeMirror是Java类型系统的抽象表示,不承载类上的注解信息,注解是标记在程序结构元素(Element接口的实现类,类对应的实现是TypeElement)上的,所以直接在TypeMirror上调用getAnnotation必然返回null,和增量编译的isolating/aggregation模式没有关联。


解决方案

先将你获取到的foreignTypeMirror转为对应的TypeElement实例,再读取注解即可,ProcessingEnvironment中提供的Types工具类可以完成转换,修改appendColumnForeignKey方法的对应逻辑即可:

private void appendColumnForeignKey(StringBuilder createTableString, TypeElement typeElement, String columnName, Column column) {
    ColumnForeignKey foreignKey = column.foreignKey();
    TypeMirror foreignTypeMirror = ProcessorHelpers.getTypeMirror(foreignKey::value);
    // 新增:将TypeMirror转为对应的Element
    Element foreignElement = types.asElement(foreignTypeMirror);
    if (!(foreignElement instanceof TypeElement)) {
        messager.error(typeElement, "Column %s foreign key references invalid type %s", columnName, foreignTypeMirror);
        return;
    }
    TypeElement foreignTypeElement = (TypeElement) foreignElement;
    // 从TypeElement读取注解,而不是TypeMirror
    CreateTable foreignTableAnnot = foreignTypeElement.getAnnotation(CreateTable.class);

    if (foreignTableAnnot == null) {
        messager.error(typeElement,
                "Column %s foreign key references class %s without CreateTable annotation",
                columnName,
                foreignTypeMirror);
        return;
    }
    // 其余原有逻辑保持不变
}

你现有代码中已经持有Types实例(调试逻辑里用到的types变量),直接复用即可。


内容的提问来源于stack exchange,提问作者Mooing Duck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 21:15:07