2010-04-27 92 views

回答

3

這是不可能的完全一般性。如果您的類存儲在一個目錄或JAR文件中,您可以查看它的內容,但類加載器機制非常靈活,以至於「這個包中的類是什麼」這個問題根本沒有意義 - 可以編寫一個類加載器返回任何類的名稱,您要求的類。

+5

哦,來吧,它確實有道理,即使這是不可能的總是回答這個問題。 – doublep 2010-04-27 21:00:18

1

你能提供一些更多的細節,比如什麼樣的環境?獨立應用程序,應用程序服務器中的Web應用程序。類從哪裏加載? JAR,文件系統上的單獨文件,網絡類加載器等。

沒有簡單的答案,只是因爲沒有簡單的包定義。一個軟件包可以分佈在多個罐子,多個類別的裝載器上,而在網絡類裝載器的情況下,這些類別存在於另一臺機器上。

最後,你想只考慮在虛擬機中加載的類還是類路徑中存在的所有類?

編輯:又見這個related question.

0

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

相關問題