有没有办法识别对象实现的接口(interface)列表。例如:LinkedList 同时实现了 List 和 Queue 接口(interface)。
是否有任何 Java 语句可用于确定它?
最佳答案
听起来您正在寻找 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
扩展了它 - 所以如果您想要 all 实现的接口(interface),你需要递归。例如,使用如下代码:
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
... 现在您会注意到 Iterable
和 Collection
出现了两次 :) 您可以将“到目前为止看到的接口(interface)”收集到一个集合中,以避免重复。
关于java - 识别对象实现的接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276219/