** Während der Anmerkungsverarbeitung wird die Zielklasse nicht in den ClassLoader auf der Prozessorseite geladen, sodass Sie die Klasse nicht auf diese Weise erhalten können **
~~ Klasse von # Element holen ~~
~~ - Typelement (Element der Klasse), Klasse dieses Elements ~~ ~~ - Variablenelement (Variablen wie Felder / Enum-Konstanten) Klasse vom Variablentyp ~~
Holen Sie sich ~~.
Es gibt ungefähr 3 andere Arten von Elementen, aber ich habe sie nicht geschrieben, weil sie nicht verifiziert wurden und es nicht notwendig zu sein scheint, Klasse
~~ Der Mechanismus ist mir egal, bewege ihn vorerst einfach! Wenn Sie eine Person sind, verwenden Sie bitte diesen Code. Bitte kopieren Sie es und fügen Sie es an einer geeigneten Stelle ein. ~~
fun Element.getDeclaredClass(): Class<*> = ((asType() as DeclaredType).asElement() as TypeElement).qualifiedName.let { name -> ClassLoader.getSystemClassLoader().loadClass(name.toString())}
Da es sich um eine Erweiterungsfunktion von ~~ Element handelt, wird getDeclaredClass () so aufgerufen und verwendet, wie es von dem Element stammt, das von "roundEnv.getElementsAnnotatedWith ()" abgerufen wurde. ~~
~~ ## Prozess zum Abrufen der Klasse vom Element ~~
~~ 1. Rufen Sie Element # asType ()
auf, um den TypeMirror vom Typ abzurufen.
2. Wandeln Sie den erhaltenen Wert in DeclaredType um.
3. Rufen Sie "DeclaredType # asElement ()" auf, um das Element vom Typ abzurufen.
4. Wandeln Sie den erhaltenen Wert in TypeElement
5. Rufen Sie den Binärnamen (vollständig qualifizierter Name) der Klasse von TypeElement ab
6. Holen Sie sich Class von ClassLoader mit dem Binärnamen ~~
~~ Schließlich können Sie Element nicht direkt in Klasse konvertieren. Sie erhalten die Klasse über den Class Loader. ~~
~~ Über Element # asType
. JavaDoc ist ~~
~~> Gibt den von diesem Element definierten Typ zurück. ~~
Es heißt ~~. Dies gibt den Typ der Variablen für ein Variablenelement und den Typ zurück, der vom Element selbst für ein Typelement dargestellt wird. Übrigens ist das in 3 erworbene Element dasselbe wie das erste Element. Im Fall von Typ Element reicht es also aus, 1 bis 4 und 5 und 6 zu überspringen. Wie 1 ~ 4 Typelement vom Typ vom variablen Element erhalten Wie 5 ~ 6 Klasse vom Typ Element erhalten Es wird sein. ~~
~~ Hier ist der Code, den ich tatsächlich geschrieben habe ~~
fun Element.getDeclaredClass(): Class<*> {
return ((asType() as DeclaredType).asElement() as TypeElement).qualifiedName.let { name ->
ClassLoader.getSystemClassLoader().loadClass(name.toString())
}
}
~~ Wäre es so, wenn es in Java geschrieben wäre? ~~
public Class<?> getDEclaredClass(Element element) {
String name = ((TypeElement)((DeclaredType)element.asType()).asElement()).getQualifiedName().toString()
return ClassLoader.getSystemClassLoader().loadClass(name)
}
Recommended Posts