Superklasse und Klassen ausgeben

Cyneon

Mitglied
Ich habe diese Vorgabe:" public static List<String> classes(Object o)". Ich möchte jetzt alle benutzten Klassen in meinem Projekt nach Superklasse -> Klasse-> Unterklasse sortieren. Also die Ausgabe sollte so aussehen:

Superklasse: class Object //root
Packages : java.io, java.lang // alle benutzten "packages". Reihenfolge ist egal
Klassen: BufferReader //Hier sollte es hierarchisch sortiert sein.
(
class java.util.AbstractCollection
class java.util.AbstractList
class java.util.ArrayList
)
Methoden: .read(); // Sollen direkt nach der Klasse kommen in der sie enthalten sind.


Ich habe keine Ahnung wie ich das umsetzen könnte. Ich habe mal ohne die Voraussetzung versucht dies zu machen.

Code:
import java.util.*;
public class Test
{
    public static void main (String args [])
    {
      classesname();
    }
    
    public static void classesname()
    {
    ArrayList<String> neueListe = new ArrayList<String>();
    Class<?> b = neueListe.getClass();
    Class<?> s =b.getSuperclass();
    Class<?> t = s.getSuperclass();
    Class<?> a = t.getSuperclass();
    Class<?> c = a.getSuperclass();
    System.out.println(b + "\n" + s + "\n" + t + "\n" + a + "\n" + c);
    }
}

Output:
class java.util.ArrayList
class java.util.AbstractList
class java.util.AbstractCollection
class java.lang.Object
null

Mein Ansatz ist ziemlich umständlich.
Vielleicht wisst ihr weiter.
 
Reflection ist das Stichwort:
Java:
public static void main(String[] args) {
        try {
            Class c = Class.forName("java.util.ArrayList");
            Field[] fields = c.getDeclaredFields();
            Constructor[] constructors = c.getDeclaredConstructors();
            Method[] methods = c.getDeclaredMethods();
            Package aPackage = c.getPackage();
            Annotation[] annotations = c.getAnnotations();
            Class[] interfaces = c.getInterfaces();
            Class[] memberClasses = c.getClasses();
            Class superclass = c.getSuperclass();
        } catch (ClassNotFoundException ex) {
            ex.printStackTrace();
        }
    }
Sind einige Methoden, die dir evtl weiterhelfen könnten
 
Hallo Schesam. Ich habe es leider nicht mit den Superklassen hinbekommen. Heißt wenn ich von meiner Klasse alle Superklassen bis hin zu java.lang.Object wiedergeben möchte.


Code:
Class[] memberClasses = klasse.getClasses();
        for(int i = 0; i<memberClasses.length -1; i++) {
            System.out.println(memberClasses[i].getName());
        }

Jedoch zeigt er mir hier nichts. Mache ich nur
sysout(memberClasses) => [Ljava.lang.Class;@2a139a55
Gibt er mir ein Array aus. Das Array ist aus irgendeinem Grund 0;
 
Weil du mit sysout(memberClasses) auch das Array ausgibst. In deinem CodeSnippet stehts aber anders (auf den ersten Blick sogar korrekt)
 
Das Problem ist, dass in diesem Array nichts drin ist. Das verstehe ich nicht ganz.
Dabei müsste rein theoretisch aber:
class java.util.AbstractList
class java.util.AbstractCollection
class java.lang.Object
das vorhanden sein. Aber ich vermute getClasses() ist hier falsch.
 
Achso.. Dann ja...
So wäre ein Ansatz:

Java:
class Bar {

}

public class Foo extends Bar {
    public static void main(String... args) {
        Class clazz = Foo.class;
        do {
            System.out.println(clazz.getName());
        }while((clazz = clazz.getSuperclass()) != null);


    }
}

gibt aus
Code:
Foo
Bar
java.lang.Object
 
Du Willst die oberklasse, also rufe getSuperclass(); auf. Mit getClasses(); Bekommst du die Klassen der inneren Klassen deiner Klasse, sollten diese vorhanden sein.

Mit den Superklassen kann man es wie Cain machen, oder über Rekursion:
Java:
public static void printSuperClasses(Class clazz) {
        if (clazz != null) {
            System.out.println(clazz.getName());
            printSuperClasses(clazz.getSuperclass());
        }
    }
Gibt auch aus:
Java:
java.util.ArrayList
java.util.AbstractList
java.util.AbstractCollection
java.lang.Object
 
Zuletzt bearbeitet:

Zurück
Oben