我正在使用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;
}
}
它适用于直接实现Serializable
的String和Character,但对于从Number超类继承Serializable的Integer,它不起作用。