在java中获得SuperInterfaces

我一直在试图做相当长一段时间,似乎无法获得理想的输出。

我想要做的是有一个类名称说java.util.Vector

得到:

  • 直接实现的接口如果java.util.Vector
  • 由超类直接实现的接口。
  • 以及这些接口的所有超接口。
  • 任何帮助,将不胜感激。


    你可以用反射来做一个BFS。

    从仅包含VectorSet<Class<?>>开始,并使用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);
    }
    

    尽管java.util.Vector不是一个接口,因此您不能通过接口来扩展它,但您可以使用像Reflections这样的库来适应这些功能。 反射允许您扫描类路径并查询一组条件,如实现或扩展给定类/接口的条件。 我已经成功地在一些需要扫描接口实现和注释类的项目中使用它。

    以下是显式链接:http://code.google.com/p/reflections/

    另外,如果你正在寻找一个类扩展/实现的类/接口,你可以通过类属性使用类反射API。

    这里有一些例子:

    //get all public methods of Vector
    Vector.class.getMethods();
    //get all methods of the superclass (AbstractList) of Vector
    Vector.class.getSuperclass().getMethods();
    //get all interfaces implemented by Vector
    Vector.class.getInterfaces();
    

    如果你打开使用另一个库:使用apache-commons-lang

    链接地址: http://www.djcxy.com/p/10607.html

    上一篇: Getting SuperInterfaces in java

    下一篇: Good Java code to read for purposes of learning?