2013-10-09 23 views

Antwort

6

Es klingt wie Sie für Class.getInterfaces() suchen:

public static void showInterfaces(Object obj) { 
    for (Class<?> iface : obj.getClass().getInterfaces()) { 
     System.out.println(iface.getName()); 
    } 
} 

Zum Beispiel auf einer Implementierung von LinkedList das druckt:

java.util.List 
java.util.Deque 
java.lang.Cloneable 
java.io.Serializable 

Beachten Sie, dass java.util.Queue hierdurch nicht angezeigt wird, weil java.util.Deque erweitert es - also wenn Sie wollen alle die Schnittstellen implementiert, müssten Sie recurse. Zum Beispiel mit Code wie folgt:

public static void showInterfaces(Object obj) { 
    showInterfaces(obj.getClass()); 
} 

public static void showInterfaces(Class<?> clazz) { 
    for (Class<?> iface : clazz.getInterfaces()) { 
     System.out.println(iface.getName()); 
     showInterfaces(iface); 
    } 
} 

... ist der Ausgang:

java.util.List 
java.util.Collection 
java.lang.Iterable 
java.util.Deque 
java.util.Queue 
java.util.Collection 
java.lang.Iterable 
java.lang.Cloneable 
java.io.Serializable 

... und jetzt werden Sie feststellen, dass Iterable und Collection zweimal auftreten :) Sie die sammeln konnte "Bisher gesehene Schnittstellen" in einem Set, um Doppelungen zu vermeiden.

Verwandte Themen