2017-10-17 84 views
4

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

實施例:

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

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

方法getAllInterfaces()應返回其延伸的所有接口:{B,C,d}的

回答

3

種類,但並非如此。

你需要做的是枚舉所有類型,其中找到的是接口和擴展接口的東西。 (使用Class#isInterfaceClass#getInterfaces。)

然而,真正的困難在於找到「所有類型」。這是否意味着當前由JVM加載的所有類型?這是否意味着可以在當前類路徑中找到的所有類型?您可以從基本上任何來源加載類,因此擴展接口的理論接口組是無限的。順便說一句,做任何這些枚舉都沒有標準的方法。對於第一個變體,請參閱此線程:Java - Get a list of all Classes loaded in the JVM

1

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

,檢查對同一類加載器的後代接口基本型將是:

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); 
} 

上面的代碼應該根據你怎麼理解「所有類型」進行更新。您可能需要添加類加載器或進行其他調整。