si potrebbe fare una BFS utilizzando il reflection per esso.
Inizia con un Set<Class<?>>
che contiene solo Vector
, e in modo iterativo aumentare il set con nuovi elementi utilizzando Class.getInterfaces()
e Class.getSuperclass()
Aggiungere gli elementi appena aggiunto alla Queue
[che è necessario per la corsa BFS]. Termina quando la coda è vuota.
elaborazione del messaggio: iterare il Set
- e prendere solo oggetti che sono interfacce utilizzando Class.isInterface()
dovrebbe essere simile a quello:
Class<?> cl = Vector.class;
Queue<Class<?>> queue = new LinkedList<Class<?>>();
Set<Class<?>> types =new HashSet<Class<?>>();
queue.add(cl);
types.add(cl);
//BFS:
while (queue.isEmpty() == false) {
Class<?> curr = queue.poll();
Class<?>[] supers = curr.getInterfaces();
for (Class<?> next : supers) {
if (next != null && types.contains(next) == false) {
types.add(next);
queue.add(next);
}
}
Class<?> next = curr.getSuperclass();
if (next != null && types.contains(next) == false) {
queue.add(next);
types.add(next);
}
}
//post processing:
for (Class<?> curr : types) {
if (curr.isInterface()) System.out.println(curr);
}
Stai cercando i metodi java.lang.Class? getInterfaces? – Glenn
Sì, uso getInterfaces(); uso la ricorsione per questo o c'è un altro modo? – programmingnewb
Vorrei ricorrere alla ricorsione. Ci sono un certo numero di campioni in giro, ex http://www.java2s.com/Tutorial/Java/0125__Reflection/GetSuperInterfaces.htm – Glenn