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
相关产品推荐
相关产品推荐

