有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类获取java中的超级接口

我已经尝试这么做了很长一段时间了,但似乎无法获得所需的输出

我想做的是让类名为java.util.Vector

获取以下信息:

  • 直接实现的接口如果java.util.Vector
  • 由超类直接实现的接口
  • 以及这些接口的所有超级接口

任何帮助都将不胜感激


共 (4) 个答案

  1. # 2 楼答案

    你可以用reflection来做BFS

    从只包含VectorSet<Class<?>>开始,使用^{}^{}迭代地增加集合中的新元素

    将刚刚添加的元素添加到Queue[这是BFS运行所需的]。当队列为空时终止

    后期处理:迭代Set,并仅使用^{}获取作为接口的对象

    应该是这样的:

    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);
    }
    
  2. # 3 楼答案

    虽然是爪哇。util。Vector不是一个接口,因此你不能用接口来扩展它,你可以使用Reflections这样的库来适应这些特性Reflections允许您扫描类路径并查询一组条件,例如实现或扩展给定类/接口的条件。我在几个项目中成功地使用了它,我需要扫描接口实现和注释类

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

    此外,如果您只是想了解一个类扩展/实现了什么类/接口,那么可以通过class属性使用类反射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();
    
  3. # 4 楼答案

    来自Apache Commons Lang^{}方法将执行以下操作:

    List<Class<?>> supernterfaces = ClassUtils.getAllInterfaces(java.util.Vector.class);