Sadece javax AnnotationProcessing'e giriyorum ve çirkin bir vakaya girdim. Benim öğrenme sürecini açıklamak sözde kod hattı dizisinin bunu açıklayacağız:Handle TypeMirror ve Class incelikle
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;
sorun olduğunu şimdi bulmaya ediyorum istemci kodu java.lang.String
veya java.lang.Object
olarak böyle bir çekirdek sınıfı içeriyorsa bir Class
parametre, bu satırı: bir ClassCastException
içinde
return (TypeMirror) entry.getValue();
... sonuçlar, AnnotationProcessor ortamı nezaketinde aslında bu durumda Class
nesneyi almak için çünkü.
Class
'un yokluğunda TypeMirror
ile yapmam gereken her şeyi nasıl yapacağımı anladım - her ikisini de şimdi kodumda işlemem gerekiyor mu? Class
nesnesinden TypeMirror
elde etmenin bir yolu var mı? Çünkü bir
Genellikle ek açıklama işlemcisi API'sı konuşurken, getKind, getTypeKind, vb. – Snicolas