2010-01-21 76 views
0

有沒有什麼方法可以知道某個特定的JVM是否可以訪問,然後拋出一個ClassNotFoundException,這樣我們就可以跳過該類的訪問,並且可以在運行時使用替代類。如何知道JVM是否可以訪問某個特定的類?

+3

你不能只抓住'ClassNotFoundException'嗎?但是我認爲如果你這樣做的話你會遇到一些更深層次的架構問題。看看谷歌Guice(http://code.google.com/p/google-guice/)或Spring IoC(http://www.devshed.com/c/a/Java/The-Spring-Framework-Understanding- IoC /)......你可能會發現它們非常有幫助。 – 2010-01-21 17:13:48

回答

1

沒有人提到這一點,因爲在那樣的問題,抓住ClassCastException異常確實是最好的辦法......但是......

如果你想要做的是檢查的.class文件的存在classpath然後嘗試抓取類作爲資源可能工作。

URL u = getClass().getResource("/java/util/List.class"); 

的ClassLoader的是,無論出於何種原因,不要從可達資源加載它們的類將意味着類不會被發現,但大多數標準的類加載器將讓這項工作。我提到它是因爲當它工作時,你可以添加能夠精確地查看.class文件在磁盤上的位置。

+0

另請注意,這隻會檢查類文件的存在。它可以存在並且仍然是無法加載的(例如,當沒有找到該類所需的類時)。 – 2010-01-24 11:04:43

3

你能顯示一些相關的代碼嗎?不知道你想要做什麼,我會說:

  1. 你應該能夠確保你提到的所有類提前在你的類路徑上。

  2. 如果您需要,您可以捕獲您期望可能發生的ClassNotFound異常,然後使用其他類型再次嘗試。

+0

我沒有示例代碼..但我有一個場景,我有db2以及oracle數據庫訪問,如果我沒有找到db2driver類我會使用oracle或副versaw。希望我清楚 – GuruKulki 2010-01-21 17:20:48

+0

當然,但是,這些司機從哪裏來?你有他們嗎?你可以把它們放在類路徑上嗎? – danben 2010-01-21 17:30:24

1

我想你應該在ClassNotFoundException異常的異常處理程序中實現解決方案。

由於您想要檢測該類是否在運行時可以訪問,因此在執行程序之前無法找到它。

0

不可能要求類加載器或調用Class.forName()而不會收到異常,但如果僅在初始化期間發生,則不會造成損害。 唯一的可能性是檢查文件系統中db-jar的類路徑。 但是,這對於很少(或沒有)利益來說工作太多。

相關問題