我一直在試圖做相當長一段時間,似乎無法獲得所需的輸出。在java中獲取超級接口
我想要做的是有一個類名說java.util.Vector
得到:
- 直接實現的接口,如果
java.util.Vector
。 - 直接由超類實現的接口。
- 以及這些接口的所有超級接口。
任何幫助,將不勝感激。
我一直在試圖做相當長一段時間,似乎無法獲得所需的輸出。在java中獲取超級接口
我想要做的是有一個類名說java.util.Vector
得到:
java.util.Vector
。任何幫助,將不勝感激。
儘管java.util.Vector不是一個接口,因此您不能使用接口進行擴展,但您可以使用庫如Reflections來適應這些功能。 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();
你可以使用reflection爲它做一個BFS。
開始只包含Vector
,並使用Class.getInterfaces()
和Class.getSuperclass()
添加剛添加的元素到Queue
[這是需要的BFS運行]迭代增加一套新的元素Set<Class<?>>
。當隊列爲空時終止。
後處理:迭代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);
}
如果您打開使用另一個庫:使用apache-commons-lang
你在尋找java.lang.Class方法嗎? getInterfaces? – Glenn 2012-03-27 00:22:56
是的,我使用getInterfaces();我爲此使用遞歸還是有另一種方式? – programmingnewb 2012-03-27 00:26:13
我會使用遞歸。周圍有許多樣本,例如http://www.java2s.com/Tutorial/Java/0125__Reflection/GetSuperInterfaces.htm – Glenn 2012-03-27 00:40:48