2011-09-30 50 views
4

如果你不知道整個包的路徑,是否可以通過名稱加載一個類?例如:加載類而不知道包?

getClassLoader().loadClass("Foo"); 

名爲「Foo」的類可能在附近,可能不是 - 我不知道該包。我想獲得匹配類及其包裝(但不知道這是可能的!)的列表,

感謝

+3

你可能想看看這個:http://stackoverflow.com/questions/520328/can-you-find-all-classes-in-a-package-using-reflection –

+0

它也可以幫助,如果你告訴我們有一些關於你的用例的情況,以防止它有一個不太方便的方法。 – millimoose

回答

-2

據我所知,這是不可能的。但IDE幫助很大。在大多數IDE中,使用Ctrl - Space列出所有可能性。

這是在NetBeans中。正如你所看到的,它會告訴你盒子裏的包裝。

enter image description here

+2

當然,如果您需要在運行時執行此操作,那並不是很有用。 – millimoose

+1

@Sii這會是什麼用例呢? – michael667

+0

詢問OP?我的觀點仍然是這樣。 – millimoose

3

如果您不知道該包,則不知道該類的名稱(因爲它是完全限定類名的一部分),因此無法找到該類。

Java類的加載機制基本上只允許你做一件事:請求一個具有完全限定名稱的類,並且類加載器將返回該類或不返回任何內容。而已。有沒有辦法要求部分匹配,或列出軟件包。

3

與以前的答案,除了在這個問題@ reader_1000的答案鏈接到:

這基本上可以複製Java搜索要加載的類的邏輯,並查看所有類文件。圖書館可以處理這部分,我記得使用Reflections。通過非限定名稱來匹配類並不是它們的主要用例,但是這個庫似乎足夠普遍,如果你四處遊蕩,這應該是可行的。請注意,這很可能是一個相當緩慢的操作。

+0

+1圖書館做他所要求的。 –