[JAVA] Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten

Beim Schreiben eines Programmdesigndokuments - oder besser gesagt, hatte ich die Möglichkeit, ein Programmdesigndokument aus dem Quellcode zu erstellen, aber das Designdokument "schreibt alle übergeordneten Klassennamen und alle in der erstellten Java-Klasse implementierten Schnittstellen zusammen. Es war so etwas wie. Es ist mühsam, dies von Hand töricht ehrlich zu machen. Deshalb habe ich beschlossen, ein Programm mit dem Namen __ "Rekursiv die übergeordnete Klasse und Schnittstelle aus dem Klassennamen suchen" __ zu schreiben. Unten finden Sie ein Beispiel dafür.



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

public class Main {
    public static void main(String[] args) throws ClassNotFoundException {
        //Erstellen Sie ein Klassenobjekt aus dem Klassennamen.
        Class<?> pivotClass = Class.forName("java.util.ArrayList");
        
        //Folgen Sie der Oberklasse rekursiv.
        List<Class<?>> classes = new ArrayList<>();
        Class<?> superClass = pivotClass;
        while (superClass != null) {
            classes.add(superClass);
            superClass = superClass.getSuperclass();
        }
        
        //Holen Sie sich eine Liste der rekursiv erworbenen Superklassen.
        for (Class<?> clazz : classes) {
            System.out.println(clazz.getName());
        }
        /* java.util.ArrayList
           java.util.AbstractList
           java.util.AbstractCollection
            java.lang.Object */        
        
        //Holen Sie sich eine Liste der implementierten Schnittstellen&Ausgabe.
        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 */
    }
}

Es ist ein wenig seltsam, dass die Klasse selbst als Klasse behandelt werden kann, aber es ist nützlich, wenn Sie sich erst einmal daran gewöhnt haben. Es lebe die Metaprogrammierung (´ ・ ω ・ `)

Recommended Posts

Ich möchte rekursiv die Oberklasse und die Schnittstelle einer bestimmten Klasse erhalten
Ich möchte eine Liste des Inhalts einer Zip-Datei und ihrer unkomprimierten Größe erhalten
Ich möchte eine Methode einer anderen Klasse aufrufen
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte dem select-Attribut einen Klassennamen geben
Ich möchte die Liste der Klassen unter dem Paket rekursiv durchsuchen
Ich möchte die MD5-Prüfsumme einer Datei in Java finden und das Ergebnis als Zeichenfolge in hexadezimaler Notation erhalten.
Ich habe versucht, die Ergebnisse vor und nach der Date-Klasse mit einer geraden Zahl auszudrücken
[Ruby] Ich möchte nur den Wert des Hash und nur den Schlüssel extrahieren
Ich möchte das Argument der Annotation und das Argument der aufrufenden Methode an den Aspekt übergeben
Ich möchte den Feldnamen des [Java] -Felds erhalten. (Alter Ton)
Ich möchte den Inhalt der Absicht var_dump
Ich möchte den Wert in Ruby erhalten
Ich möchte den Wert von Cell unabhängig vom CellType (Apache POI) transparent erhalten.
Was ich versucht habe, als ich alle Felder einer Bohne bekommen wollte
Ich möchte die Antwort der Janken-App wissen
Ich möchte den Namen des Posters des Kommentars anzeigen
Ich möchte die Bildlaufposition von UITableView zurückgeben!
Ich möchte der Kommentarfunktion eine Löschfunktion hinzufügen
Ich möchte PowerMock in einer Klasse verwenden, die parametrisierte Tests und gewöhnliche Tests kombiniert
[Rails] Ich möchte das Linkziel von link_to auf einer separaten Registerkarte anzeigen
Ich habe versucht, die Grundlagen von Kotlin und Java zusammenzufassen
Ich möchte Tomcat auf den Server bringen und die Anwendung starten
Ich möchte ein bestimmtes Modell von ActiveRecord ReadOnly erstellen
Ich möchte die Protokollausgabeeinstellung von UtilLoggingJdbcLogger ändern
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Ich habe JAX-RS ausprobiert und mir das Verfahren notiert
Ich möchte ein Formular erstellen, um die Kategorie [Schienen] auszuwählen
[jsoup] So erhalten Sie die gesamte Dokumentation
[Ruby] Ich möchte die Reihenfolge der Hash-Tabelle umkehren
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Ich möchte rekursiv nach Dateien in einem bestimmten Verzeichnis suchen
Ich möchte nur dem Poster Bearbeitungs- und Löschberechtigungen erteilen
[Rails] So erhalten Sie die URL der Übergangsquelle und leiten sie um
Ich möchte den Ablauf der Spring-Verarbeitungsanforderungsparameter verstehen
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
Die Geschichte von Collectors.groupingBy, die ich für die Nachwelt behalten möchte
Ich habe ein Juwel gemacht, um den Text des Org-Modus in Qiita zu posten
Methode, um die Anzahl der Jahre zu addieren und das Monatsende zu erhalten
Ich möchte die Eingabe begrenzen, indem ich den Zahlenbereich einschränke
Ich habe versucht, die Methoden von Java String und StringBuilder zusammenzufassen
Ich möchte die Standardfehlermeldung von Spring Boot steuern
Ich habe ein Tool erstellt, um den Unterschied zwischen CSV-Dateien auszugeben
Ich möchte den Wert von Attribute in Selenium of Ruby ändern
[Android] Ich möchte den Listener über die Schaltfläche in ListView abrufen
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Ich möchte die Notwendigkeit des Testens beurteilen, indem ich die Unterschiede der Klassendateien beim Refactoring von Java vergleiche.
[Controller] Ich möchte den numerischen Wert einer bestimmten Spalte aus der Datenbank abrufen (mein Memo).
[Spring Boot] Ich möchte meine eigene Eigenschaftendatei hinzufügen und den Wert mit env.getProperty () abrufen.
Ich möchte eine Webanwendung entwickeln!