2016-05-13 257 views
0

加載一個由兩個不同的類加載器實例化的對象時遇到問題。基本上我實現了一個帶有三個不同插件的webapp,每個插件都有自己的類加載器。項目結構如下:如何使用兩個不同的類加載器加載同一個類

MyAppService 
- ObjectInterface.java 
MyAppImpl 
- ObjectImplementation.java 
MyClass 
- MyClass.java 

它是一個基於maven的項目。 MyAppImplMyClass都具有MyAppService作爲依賴性。現在,我使用此代碼創建類ObjectImplementation中類ObjectImplementation的對象。

ObjectInterface o = new ObjectImplementation(); 

我想這個對象傳遞給方法在Myclass類,在這裏我得到這個代碼的對象。

ObjectInterface o = (ObjectInterface) passedObject; 

但我得到了異常java.lang.ClassCastException: MyAppImpl.ObjectImplementation cannot be cast to MyAppService.ObjectInterface。我也嘗試動態類加載與代碼

ObjectInterface o = (ObjectInterface) Class.forName("MyAppImpl.ObjectImplementation").newInstance(); 

但我得到例外java.lang.ClassNotFoundException: MyAppImpl.ObjectImplementation。添加MyAppImpl作爲MyClass的依賴項目前不是一種選擇。有誰知道我的問題是否有解決方案?

回答

0

請閱讀ClassLoaders及其層次結構。還請閱讀有關委派機制。

在你的情況,類由葉類加載器加載,並有相同類的不同副本。如果特定類未被當前類加載器或其父類加載,那麼您將獲得java.lang.ClassCastException

相關問題