Вы можете сделать BFS , используя для этого отражение .
Начните с Set<Class<?>>
, который содержит только Vector
, и итеративно увеличивайте набор новыми элементами, используя Class.getInterfaces()
и Class.getSuperclass()
Добавьте только что добавленные элементы в Queue
[который необходим для запуска BFS]. Завершить, когда очередь пуста.
Постобработка: выполните итерацию Set
- и возьмите только объекты, которые являются интерфейсами, использующими Class.isInterface()
Должно выглядеть примерно так:
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);
}