[JAVA] Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe

En écrivant un document de conception de programme - ou plutôt, j'ai eu l'occasion de créer un document de conception de programme à partir du code source, mais le document de conception "écrit tous les noms de classe parent et toutes les interfaces implémentées dans la classe Java créée ensemble. C'était quelque chose comme ça. Il est difficile de faire cela à la main avec une honnêteté stupide. J'ai donc décidé d'écrire un programme appelé __ "Trouver récursivement la classe parent et l'interface à partir du nom de la classe" __. Vous en trouverez ci-dessous un exemple.



import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws ClassNotFoundException {
        //Créez un objet de classe à partir du nom de la classe.
        Class<?> pivotClass = Class.forName("java.util.ArrayList");
        
        //Suivez la superclasse de manière récursive.
        List<Class<?>> classes = new ArrayList<>();
        Class<?> superClass = pivotClass;
        while (superClass != null) {
            classes.add(superClass);
            superClass = superClass.getSuperclass();
        }
        
        //Obtenez une liste des superclasses acquises récursivement.
        for (Class<?> clazz : classes) {
            System.out.println(clazz.getName());
        }
        /* java.util.ArrayList
           java.util.AbstractList
           java.util.AbstractCollection
            java.lang.Object */        
        
        //Obtenez une liste des interfaces implémentées&Production.
        Class<?>[] interfaces = pivotClass.getInterfaces();
        for (Class<?> interfaze : interfaces) {
            System.out.println(interfaze.getName());
        }
        /* java.util.List
           java.util.RandomAccess
           java.lang.Cloneable
           java.io.Serializable */
    }
}

C'est un peu étrange que la classe elle-même puisse être traitée comme une classe, mais c'est utile une fois que vous vous y êtes habitué. Vive la méta-programmation (´ ・ ω ・ `)

Recommended Posts

Je veux obtenir récursivement la superclasse et l'interface d'une certaine classe
Je veux obtenir une liste du contenu d'un fichier zip et sa taille non compressée
Je veux appeler une méthode d'une autre classe
Je veux appeler une méthode et compter le nombre
Je veux donner un nom de classe à l'attribut select
Je souhaite rechercher de manière récursive la liste des classes sous le package
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
[Ruby] Je souhaite extraire uniquement la valeur du hachage et uniquement la clé
Je veux passer l'argument d'Annotation et l'argument de la méthode d'appel à aspect
Je veux obtenir le nom de champ du champ [Java]. (Vieux ton d'histoire)
Je veux var_dump le contenu de l'intention
Je veux obtenir la valeur en Ruby
Je veux obtenir la valeur de Cell de manière transparente quel que soit CellType (Apache POI)
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
Je veux connaître la réponse de l'application Janken
Je souhaite afficher le nom de l'affiche du commentaire
Je veux retourner la position de défilement de UITableView!
Je souhaite ajouter une fonction de suppression à la fonction de commentaire
Je souhaite utiliser PowerMock dans une classe qui combine des tests paramétrés et des tests ordinaires
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
J'ai essayé de résumer les bases de kotlin et java
Je veux amener Tomcat sur le serveur et démarrer l'application
Je souhaite créer un modèle spécifique d'ActiveRecord ReadOnly
Je souhaite modifier le paramètre de sortie du journal de UtilLoggingJdbcLogger
Je veux faire une liste avec kotlin et java!
Je veux créer une fonction avec kotlin et java!
J'ai essayé JAX-RS et pris note de la procédure
Je souhaite créer un formulaire pour sélectionner la catégorie [Rails]
[jsoup] Comment obtenir la totalité de la documentation
[Ruby] Je souhaite inverser l'ordre de la table de hachage
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
Je souhaite rechercher de manière récursive des fichiers dans un répertoire spécifique
Je souhaite accorder des autorisations de modification et de suppression uniquement à l'affiche
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
Je veux comprendre le flux des paramètres de demande de traitement Spring
Je veux revenir à l'écran précédent avec kotlin et java!
L'histoire de Collectors.groupingBy que je veux garder pour la postérité
J'ai fait un petit bijou pour poster le texte du mode org sur qiita
Méthode pour additionner le nombre d'années et obtenir la fin du mois
Je veux limiter l'entrée en réduisant la plage de nombres
J'ai essayé de résumer les méthodes de Java String et StringBuilder
Je veux contrôler le message d'erreur par défaut de Spring Boot
J'ai créé un outil pour afficher la différence du fichier CSV
Je veux changer la valeur de l'attribut dans Selenium of Ruby
[Android] Je souhaite obtenir l'auditeur à partir du bouton de ListView
[Swift] Lorsque vous voulez savoir si le nombre de caractères dans String correspond à un certain nombre ...
Je veux juger de la nécessité de tester en comparant les différences des fichiers de classe lors de la refactorisation de Java.
[Controller] Je veux récupérer la valeur numérique d'une colonne spécifique de la base de données (mon mémo)
[Spring Boot] Je veux ajouter mon propre fichier de propriétés et obtenir la valeur avec env.getProperty ().
Je souhaite développer une application web!