[英]Java - How to find the interfaces extended by a particular interface or the super interface name
[英]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#isInterface
和Class#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.