可能重複:
Can you find all classes in a package using reflection?如何知道java中的包的類?
想我再也包名稱作爲字符串:
String pkgName = "com.forat.web.servlets";
如何知道這個包的類型?
可能重複:
Can you find all classes in a package using reflection?如何知道java中的包的類?
想我再也包名稱作爲字符串:
String pkgName = "com.forat.web.servlets";
如何知道這個包的類型?
這是不可能的完全一般性。如果您的類存儲在一個目錄或JAR文件中,您可以查看它的內容,但類加載器機制非常靈活,以至於「這個包中的類是什麼」這個問題根本沒有意義 - 可以編寫一個類加載器返回任何類的名稱,您要求的類。
哦,來吧,它確實有道理,即使這是不可能的總是回答這個問題。 – doublep 2010-04-27 21:00:18
你能提供一些更多的細節,比如什麼樣的環境?獨立應用程序,應用程序服務器中的Web應用程序。類從哪裏加載? JAR,文件系統上的單獨文件,網絡類加載器等。
沒有簡單的答案,只是因爲沒有簡單的包定義。一個軟件包可以分佈在多個罐子,多個類別的裝載器上,而在網絡類裝載器的情況下,這些類別存在於另一臺機器上。
最後,你想只考慮在虛擬機中加載的類還是類路徑中存在的所有類?
編輯:又見這個related question.
這兩個答案解釋,應該涵蓋許多實際問題的方法:
F你有一個.jar文件你想從你的.class文件可以使用以下內容:
java.util.jar.JarEntry
java.net.JarURLConnection
經由java.net.URL
創建。
在這種情況下,URL是在這種情況下,包的名稱是:com.forat.web.servlets
例
(注:忽略異常處理)
// Get the "things" that are in the .jar
Enumeration<JarEntry> jarEntries =
((JarURLConnection)urlToJar.openConnection()).getJarFile().entries();
while(jarEntries.hasMoreElements())
{
String entry = jarEntries.nextElement().getName();
if (entry.endsWith(".class"))
{
// TODO: Remove "." from result.
// Here is the first of the classes in the .servlets location
Class.forName(entry);
}
}
http:// stackoverf的副本low.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection(或至少非常接近) – Jonik 2010-04-27 21:00:11