我写了一个接受java.lang.Class
对象的注释。我想将带注释的类和注释值保存为文件中的键值对,但在我的情况下,这仅在注释值类可以从带注释的类中分配时才有效。
现在在我的注释处理器中,我从注释值获得了一个java.lang.Class
对象,并且javax.lang.model.element.TypeElement
作为带注释的类。
由于java.lang.Class
只接受java.lang.Class
isAssignableFrom
方法,因此我不知道如何比较它们。
我也无法从javax.lang.model.element.TypeElement
找到合适的方法。
我的代码是这样的:
Set<? extends Element> annotatedClasses = roundEnv.getElementsAnnotatedWith(DefaultOf.class);
for(clazz : annotatedClasses) {
TypeElement asType = (TypeElement) clazz;
Class<?> annotationVal = asType.getAnnotation(DefaultOf.class).value();
if(annotationVal.isAssignableFrom((asType)) { // not working, wrong type
}
}
我如何比较它们?
答案 0 :(得分:1)
未经测试,但我使用的是类似代码:
Set<?extends Element> annotatedClasses = roundEnv.getElementsAnnotatedWith(DefaultOf.class);
for(Element clazz : annotatedClasses){
TypeElement asType=(TypeElement)clazz;
Class<?> annotationVal=asType.getAnnotation(DefaultOf.class).value();
TypeMirror annotationValType = processingEnv.getElementUtils().getTypeElement(annotationVal.getCanonicalName()).asType();
if(processingEnv.getTypeUtils().isAssignable(annotationValType, asType.asType())){
//annotationVal class is assignable to annotated class
}
}
基本上您需要获取TypeMirror
类的类型(annotationVal
),然后使用isAssignable
TypeUtils
方法对其进行比较