gpt4 book ai didi

java - 比较 java.lang.Class 和 javax.lang.model.element.TypeElement 的对象

转载 作者:行者123 更新时间:2023-12-01 10:54:18 25 4
gpt4 key购买 nike

我编写了一个接受 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
}
}

我如何比较它们?

最佳答案

未经测试,但我正在使用类似的代码:

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
}
}

基本上,您需要获取 annotationVal 类的类型 (TypeMirror),然后使用 TypeUtils 中的 isAssignable 方法进行比较

关于java - 比较 java.lang.Class 和 javax.lang.model.element.TypeElement 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33712566/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com