在java中获得SuperInterfaces
我一直在试图做相当长一段时间,似乎无法获得理想的输出。
我想要做的是有一个类名称说java.util.Vector
得到:
java.util.Vector
。 任何帮助,将不胜感激。
你可以用反射来做一个BFS。
从仅包含Vector
的Set<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