2010-04-26 30 views
1

因此,194698問題顯示瞭如何在運行時加載jar文件,並且可以加載單個命名類並獲取Class對象。現在我的問題是我想能夠將這些類轉換爲它們真正的類型,但是我不能,因爲我不能使用導入,因爲整個過程要在運行時加載它,而不是編譯時間。所以我在運行時動態加載一個jar如何使用它?

似乎要走的路是使用反射來發現函數和字段名稱,但這看起來很脆弱,因爲jar文件中的API可能會更改,代碼在運行之前不會中斷。

有沒有更好的方法?

回答

3

通常的方法是通過一個定義良好的接口使用動態加載的類(如您所接受問題的接受答案中所示,使用Runnable)。這樣他們的實現細節可以自由改變,只要他們實現了接口。因此,您將加載類的實例轉換爲try塊內的該接口,在類沒有實現接口的情況下捕獲並處理ClassCastException(這在上面提到的答案中沒有顯示,但是很容易添加),否則從此以後愉快地使用它。

+0

是的,這是有道理的。 – justinhj 2010-04-26 18:06:30

1

如果你不知道的類可什麼也沒有人知道他們的界面,沒有或很少的可能性,您使用它們(人民的鬥爭已經知道接口)

一般來說這種「延伸「模塊被編碼到一個特定的接口,所以新加載的類將總是有特定的方法(例如,JDBC驅動程序總是期望找到一個PreparedStatement實現,即使它不知道底下還有什麼)

在你的情況下,如果你想加載和使用任意類,我看到的唯一剩餘的資源是提供一些機制t o添加腳本語言(如Groovy,Jython或JRuby)和代碼到發現的界面。

相關問題