** Pendant le traitement des annotations, la classe cible n'est pas chargée dans le ClassLoader côté processeur, vous ne pouvez donc pas obtenir la classe de cette façon **
~~ Obtenir la classe à partir de # élément ~~
~~ - Type Element If (Element of class), Classe de cet élément ~~ ~~ - Élément variable (variables telles que les constantes de champs / énumération) Classe du type de variable ~~
Obtenez ~~.
Il existe environ 3 autres types d'éléments, mais je ne les ai pas écrits car ils n'ont pas été vérifiés et il ne semble pas nécessaire d'en obtenir la classe
~~ Je me fiche du mécanisme, déplacez-le simplement pour le moment! Si vous êtes une personne, veuillez utiliser ce code. Veuillez le copier et le coller dans un endroit approprié. ~~
fun Element.getDeclaredClass(): Class<*> = ((asType() as DeclaredType).asElement() as TypeElement).qualifiedName.let { name -> ClassLoader.getSystemClassLoader().loadClass(name.toString())}
Puisqu'il s'agit d'une fonction d'extension de ~~ Element, getDeclaredClass () est appelé et utilisé tel quel à partir de l'élément récupéré autour de roundEnv.getElementsAnnotatedWith ()
. ~~
~~ ## Processus pour obtenir une classe à partir de l'élément ~~
~~ 1. Appelez ʻElement # asType () pour obtenir le TypeMirror de type. 2. Convertissez la valeur obtenue en DeclaredType. 3. Appelez
DeclaredType # asElement ()` pour obtenir l'élément de type.
4. Convertissez la valeur obtenue en TypeElement
5. Obtenez le nom binaire (nom complet) de la classe à partir de TypeElement
6. Obtenir la classe depuis ClassLoader en utilisant le nom binaire ~~
~~ Après tout, vous ne pouvez pas convertir Element directement en classe. Vous obtiendrez la classe via le chargeur de classe. ~~
~~ ʻA propos de l'élément # asType`. JavaDoc est ~~
~~> Renvoie le type défini par cet élément. ~~
Il dit ~~. Il renvoie le type de la variable pour un élément variable et le type représenté par l'élément lui-même pour un élément de type. À propos, l'élément acquis en 3 est le même que le premier élément, donc dans le cas de l'élément de type, sauter 1 à 4 et 5 et 6 suffira. Comment 1 ~ 4 obtenir un élément de type de type à partir d'un élément variable Comment 5 ~ 6 obtenir la classe de l'élément de type Ce sera. ~~
~~ Voici le code que j'ai écrit ~~
fun Element.getDeclaredClass(): Class<*> {
return ((asType() as DeclaredType).asElement() as TypeElement).qualifiedName.let { name ->
ClassLoader.getSystemClassLoader().loadClass(name.toString())
}
}
~~ Serait-ce comme ça s'il était écrit en Java? ~~
public Class<?> getDEclaredClass(Element element) {
String name = ((TypeElement)((DeclaredType)element.asType()).asElement()).getQualifiedName().toString()
return ClassLoader.getSystemClassLoader().loadClass(name)
}
Recommended Posts