有没有办法识别对象实现的接口列表。例如:LinkedList 实现了 List 和 Queue 接口。
是否有任何 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
它扩展了它 - 所以如果你想要实现所有接口,你需要递归。例如,使用这样的代码:
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
出现两次 :) 您可以将“到目前为止看到的界面”收集在一组中,以避免重复。