5

有没有办法识别对象实现的接口列表。例如:LinkedList 实现了 List 和 Queue 接口。

是否有任何 Java 语句可以用来确定它?

4

1 回答 1

6

听起来您正在寻找Class.getInterfaces()

public static void showInterfaces(Object obj) {
    for (Class<?> iface : obj.getClass().getInterfaces()) {
        System.out.println(iface.getName());
    }
}

例如,在LinkedList打印的实现上:

java.util.List
java.util.Deque
java.lang.Cloneable
java.io.Serializable

请注意,这java.util.Queue不会显示它,因为java.util.Deque它扩展了它 - 所以如果你想要实现所有接口,你需要递归。例如,使用这样的代码:

public static void showInterfaces(Object obj) {
    showInterfaces(obj.getClass());
}

public static void showInterfaces(Class<?> clazz) {
    for (Class<?> iface : clazz.getInterfaces()) {
        System.out.println(iface.getName());
        showInterfaces(iface);
    }
}

...输出是:

java.util.List
java.util.Collection
java.lang.Iterable
java.util.Deque
java.util.Queue
java.util.Collection
java.lang.Iterable
java.lang.Cloneable
java.io.Serializable

...现在您会注意到IterableCollection出现两次 :) 您可以将“到目前为止看到的界面”收集在一组中,以避免重复。

于 2013-10-09T15:28:25.347 回答