簡體   English   中英

java從基接口獲取所有擴展接口

[英]java get all extended interfaces from base interface

是否有可能獲得擴展基接口的所有接口的列表, 而沒有任何 bean 在運行時在java 實現任何接口?

例:

interface A {}
interface B extends A{}
interface C extends A{}
interface D extends C{}

public Class<? extends A>[] getAllInterfaces(A.class);

方法getAllInterfaces()應返回所有擴展A:{B,C,D}的接口

有點,但不是真的。

您需要做的是枚舉所有類型,並在其中查找接口和擴展接口的內容。 (使用Class#isInterfaceClass#getInterfaces 。)

然而,真正的困難在於找到“所有類型”。 這是否意味着JVM當前加載的所有類型? 它是否意味着可以在當前類路徑中找到所有類型? 您可以從基本上任何源加載類,因此擴展您的接口的理論接口集是無限的。

順便說一下,沒有標准的方法可以做任何這些枚舉。 對於第一個變體,請參閱此線程: Java - 獲取JVM中加載的所有類的列表

如果您不需要使用純反射進行掃描,則可以使用“ 反射”庫進行掃描。

檢查同一類加載器上的后代接口的基本變體是:

public <T> Class<? extends T>[] getAllInterfaces(Class<T> clazz) {

    Reflections reflections = new Reflections(clazz.getClassLoader());

    return reflections.getSubTypesOf(clazz)
            .stream()
            .filter(subClass -> subClass.isInterface())
            .toArray(Class[]::new);
}

上面的代碼應根據您如何理解“所有類型”進行更新。 您可能需要添加類加載器或進行其他一些調整。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM