Java Annotation Processor:检查TypeMirror是否实现特定的通用接口

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java Annotation Processor:检查TypeMirror是否实现特定的通用接口相关的知识,希望对你有一定的参考价值。

我正在编写注释处理器,我需要检查特定的TypeMirror是否实现了特定的接口。问题Java Annotations Processor: Check if TypeMirror implements specific interface为非通用接口提供了答案。但它不适用于通用接口,例如String正在实现Comparable<String> - 并且使用isAssignable的代码不起作用。

此代码按预期工作:

TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType();
TypeMirror serializable = elementUtil.getTypeElement("java.io.Serializable").asType();
boolean isSerializable = typeUtil.isAssignable(tm, serializable);
//here isSerializable is true

但是这段代码没有:

TypeMirror tm = elementUtil.getTypeElement("java.lang.String").asType();
TypeMirror comparable = elementUtil.getTypeElement("java.lang.Comparable").asType();
boolean isComparable = typeUtil.isAssignable(tm, comparable);
//here isComparable is false

我认为,原因是,'可比'的TypeElement是用String作为通用参数定义的,但我不知道如何绕过它。

答案

qazxsw poi返回实际类型qazxsw poi。 qazxsw poi不能转让给Elements.getTypeElement,但可以加入Comparable<T>String。因此,最简单的方法是通过Comparable<T>擦除泛型类型。

Comparable<String>

以上是关于Java Annotation Processor:检查TypeMirror是否实现特定的通用接口的主要内容,如果未能解决你的问题,请参考以下文章

一小时搞明白注解处理器(Annotation Processor Tool)

一小时搞明白注解处理器(Annotation Processor Tool)

一小时搞明白注解处理器(Annotation Processor Tool)

idea中的springboot+gradle项目报错springboot configuration annotation processor not found in classpath

Annotation Processor添加方法调用

spring boot configuration annotation processor not configured