java - 识别对象实现的接口(interface)列表

标签 java

有没有办法识别对象实现的接口(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

... 现在您会注意到 IterableCollection 出现了两次 :) 您可以将“到目前为止看到的接口(interface)”收集到一个集合中,以避免重复。

关于java - 识别对象实现的接口(interface)列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19276219/

相关文章:

java - 如何禁用 PrettyPrint xstream xml 并仍然添加样式表和序言?

java - 使用三重 int 数组

java - 检查哈希表中的键与其值之间是否存在值

java - 如何隐藏我的网址参数?

java - Spark Java 应用程序 UDF 的日志未出现在控制台或执行程序日志文件中

java - 以 Base64 和 utf-8 解码电子邮件主题字符串

java - 如何遍历数组并检查重复项?

java - jsoup 白名单放松模式对于所见即所得编辑器来说过于严格

java - 连接 Bash/Java/MySQL

java - JAVA中如何去除字符串中的转义字符