Java Annotations Processor:检查TypeMirror是否实现特定接口

 大工 发布于 2023-02-13 10:17

我正在使用Java注释处理器.我的注释@foo用于标记可在运行时读取到文件或文件的字段变量.但是,我想检查变量类型是否Serializable在编译期间实现,因此如果该字段不可序列化,我可以在编译时给出警告/错误.

(我不需要实际检查对象是否可序列化,如果它实现了Serializable我信任它的接口).

我已经想出了如何做其他的东西,但我无法弄清楚如何检查该元素是否实现Serializable.我可以使用这个TypeElement#getInterfaces方法,但我无法弄清楚如何检查是否有任何TypeMirror返回的方法Serializable.

此外,如果有人碰巧知道任何好的java.lang.model或Java Annotations教程,那也会有所帮助.

编辑:我试过这个......

isSerializable = false  
for(TypeMirror tm : processingEnv.getTypeUtils().directSupertypes(em.asType()))  
{  
if(isSerializable = "java.io.Serializable".equals(tm.toString()))  
{  
break;  
}  
}  

它适用于直接实现的String和Character,Serializable但是对于从Number超类继承Serializable的Integer,它不起作用.

1 个回答
  • 而不是检查直接超的,你应该使用Types.isAssignable检查,如果Serializable一个的的超类型TypeMirror:

    TypeMirror serializable = elementUtil.getTypeElement("java.io.Serializable").asType();
    boolean isSerializable = typeUtil.isAssignable(tm, serializable);
    

    2023-02-13 10:21 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有