我刚刚在这里进入 javax AnnotationProcessing,并且遇到了一个丑陋的案例。我将用一系列描述我的学习过程的伪代码行来说明它:
MyAnnotation ann = elementIfound.getAnnotation(MyAnnotation.class);
// Class<?> clazz = ann.getCustomClass(); // Can throw MirroredTypeException!
// Classes within the compilation unit don't exist in this form at compile time!
// Search web and find this alternative...
// Inspect all AnnotationMirrors
for (AnnotationMirror mirror : element.getAnnotationMirrors()) {
if (mirror.getAnnotationType().toString().equals(annotationType.getName())) {
// Inspect all methods on the Annotation class
for (Entry<? extends ExecutableElement,? extends AnnotationValue> entry : mirror.getElementValues().entrySet()) {
if (entry.getKey().getSimpleName().toString().equals(paramName)) {
return (TypeMirror) entry.getValue();
}
}
return null;
}
}
return null;
问题是,现在我发现如果客户端代码包含一个核心类,如java.lang.String
或java.lang.Object
作为Class
参数,这一行:
return (TypeMirror) entry.getValue();
...导致 a ClassCastException
,因为 AnnotationProcessor 环境足以Class
在这种情况下实际检索对象。
我已经想出了TypeMirror
在没有的情况下如何做我需要做的一切Class
——我现在需要在我的代码中处理它们吗?有没有办法TypeMirror
从Class
对象中获取 a ?因为我找不到