2014-06-16 74 views
0

我有一個Eclipse項目(MainProject),它引用了另一個Eclipse項目(ReferencedProject)。 MainProject也引用一個JAR文件(ReferencedJar)。這個ReferencedJar的文件名是已知的。我也知道ReferencedJar中有一個類(ReferencedClass),但我不知道ReferencedClass包是什麼,因爲事先不知道包的路徑。如何在不知道包的情況下實例化一個類?

我需要使用反射在ReferencedProject中實例化ReferencedClass。我怎樣才能做到這一點?當項目打包到Eclipse之外的獨立jar時,解決方案是否可行?

這個問題的原因是; ReferencedJar是由建模器應用程序生成的文件。它爲您的模型生成Java類並將它們放入ReferencedJar中。用戶可以選擇將其生成的類放入哪個包中。但類名永遠是一樣的。 MainProject是包含這個生成的jar的項目,但ReferencedProject(一個框架)也需要在這個生成的jar中實例化一個類。希望這可以讓問題更清楚。

在此先感謝

編輯:其實我有一個想法,但不知道如何實現它。因爲我知道ReferencedJar文件的名稱,所以我可以在運行時訪問它並檢查它包含的所有類。然後我可以通過名稱比較找到匹配的類。但是我怎樣才能在運行時訪問ReferencedJar?

+0

如果你在控制進程,並在已知位置列出完全限定的ReferencedClass名稱 – MadProgrammer

+0

的某種配置文件,可惜我不是。我無法修改Modeller應用程序的代碼。 – randomVariable

回答

0

你不能實例化一個類你如果不知道它的包裝

1

只要你需要的類在類路徑中,你可以通過調用Class.forName(String className)

String className = "WhatEver"; 
String packageName = "some.package"; 
Class<?> c = Class.forName(packageName + "." + className); 
得到它的引用

但是,如果您不知道軟件包名稱,並且無法從配置文件中獲取軟件包名稱,我建議使用類似reflections的庫來掃描類路徑並查找相關的類。

+0

反射庫網站表示它會獲得與正則表達式匹配的所有資源。我認爲這應該可以解決我的問題,但老實說,我不希望爲此任務使用整個庫。再次,如果我找不到更簡單的解決方案,我會嘗試一下。 – randomVariable

相關問題