我想獲取一個課程的進口列表。由於這被編譯器刪除了,我想通過反射可以掃描類,它是方法,字段等,並且收集類加載類所需的類的列表。是否有某種圖書館,教程或文章可以指向我,這樣我可以更好地理解如何做到這一點? (我瞭解類似的問題已經被問到,但我找不到正確的答案,我很確定這應該是可能的)。我看到了一些例子,說明如果你有來源,你如何做到這一點,但在我的情況下並不一定如此。獲取要加載的課程的必要課程列表
非常感謝提前!
我想獲取一個課程的進口列表。由於這被編譯器刪除了,我想通過反射可以掃描類,它是方法,字段等,並且收集類加載類所需的類的列表。是否有某種圖書館,教程或文章可以指向我,這樣我可以更好地理解如何做到這一點? (我瞭解類似的問題已經被問到,但我找不到正確的答案,我很確定這應該是可能的)。我看到了一些例子,說明如果你有來源,你如何做到這一點,但在我的情況下並不一定如此。獲取要加載的課程的必要課程列表
非常感謝提前!
不,反射將不利於
void test() {
Date date = new Date();
}
您不能檢測日期是內部方法與反思中。但是你可以
有!那有多複雜! :) 非常感謝! – carlspring
如果一個給定的類不在類路徑上,這也能起作用嗎? – carlspring
Theres cp。makeClass(InputStream classFile) –
我不認爲這是可能的遠程除了通過閱讀源使用了Javassist https://github.com/jboss-javassist/javassist
ClassPool cp = ClassPool.getDefault();
Collection classes = cp.get("test.Test").getRefClasses();
這段代碼產生的test.Test類引用的所有類的名稱的集合。 java文件本身。我相當確信Java只是在編譯期間使用列表進行掃描,然後將其拋棄。但是,Spring有這樣的東西,並且有一個google項目,可以掃描包註釋和類似的東西(忘記名稱 - classpath?)。
我建議你看看春天,它可能正是你想要的,更多,並以下一個程序員會自動理解(如果他們知道春天)的方式。
IoC並不是我正在尋找的東西,但你確實是對的,春天似乎正在做一些類似的魔術。 – carlspring
Spring不僅僅是IoC,它使得面向方面的Java更易於訪問。它可以掃描和實例化軟件包,並允許您在調用方法之前和之後執行操作等。 –
可能的重複[如何獲得所有使用java反射在類中定義的導入?](http://stackoverflow.com/questions/5701305/how-to-get-all-imports-defined-in-a- class-using-java-reflection) – Gamb
@Gamb:這不是重複的!我已經看過,我知道你不能得到確切的進口清單。然而,從理論上講,你應該能夠使用反射來收集你的課程使用的所有類的列表。我正在尋找這樣一個圖書館。 – carlspring
您需要查看原始字節碼。你的課堂可能需要一門需要另一門課程的課程。你必須一直這樣做直到你缺課。注意:這可能比你需要的多,因爲一個類可能不需要僅僅因爲它引用了另一個類。另外一個類可能需要通過反射另一個類。 –