【问题标题】:How to find all (child) sub-interfaces of a particular interface in Java?如何在 Java 中查找特定接口的所有(子)子接口?
【发布时间】:2015-11-20 11:41:34
【问题描述】:

给定一个接口:

public interface A {};

带有继承接口:

public interface B extends A {}

public interface C extends A {}

如何以编程方式扫描找到BC? IE。如何做到这一点:

Type[] types = findAllSubInterfacesOfA(); // Returns [B.class, C.class]

注意:我试图在这里找到接口,不是类或实例。

【问题讨论】:

  • 您需要一种方法来检查类型是类还是接口。或者您需要一种方法来加载所有类型(类和接口)并逐个检查它们是否是扩展“A”的接口?
  • 我知道这不是你问的,但它解决了你的问题吗? stackoverflow.com/questions/347248/…
  • @Paulo 不幸的是,这个答案是错误的——它是在寻找父接口而不是子接口。
  • @DavideLorenzoMARINO 是的,但希望这可能在以前的某个地方完成过(可能是通过 Spring、Google Reflections 或其他一些库......)

标签: java spring reflection interface reflections


【解决方案1】:

按照 sn-p 应该可以做到。

public class FindSubinterfaces {

    public static void main(String[] args) {
        Class clazz = A.class;

        Reflections reflections = new Reflections(new ConfigurationBuilder()
                .setUrls(Arrays.asList(ClasspathHelper.forClass(clazz))));

        Set<Class<? extends List>> subTypes = reflections.getSubTypesOf(clazz);
        for (Class c : subTypes) {
            if (c.isInterface()) {
                System.out.println("subType: " + c.getCanonicalName());
            }
        }
    }
}

interface A {
};

interface B extends A {
}

interface C extends A {
}

class CA implements A {
}

abstract class DC implements C {
}

输出

subInterface: sub.optimal.reflections.B
subInterface: sub.optimal.reflections.C

【讨论】:

  • 很好,但是当这不是直接扩展时,它似乎不起作用。即:接口 C 扩展 B 而不是 A
  • @Jos 当然。要求是找到给定接口的直接子接口。如果您想查找实现给定接口的所有类/接口,请使用subTypes 中提供的结果。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-16
  • 2021-06-21
  • 2018-07-01
  • 2011-11-06
  • 1970-01-01
  • 2015-03-18
  • 1970-01-01
相关资源
最近更新 更多