2013-10-02 81 views
1

我正在用java編寫一個軟件,而且這種繼承問題總是出現。有趣的是,當我在我的IDE(Eclipse Kepler)中運行程序時,我沒有遇到問題,但是一旦我將它導出到可執行的jar中,問題就會開始。我認爲我是唯一一個遇到這個問題的人,因爲谷歌上的所有搜索都顯示出直接的反面。java中的繼承,將子類強制轉換爲超類

我的問題是我有一個名爲VoteType的接口。這個接口由幾個具體類實現。我使用XMLEncoder將具體實現保存到文件中,並使用XMLDecoder檢索它。

但是,當我嘗試將其轉換到接口它實現VoteType,我得到ClassCastException。什麼可能造成這種情況?

+1

請添加代碼片段 – shevchyk

回答

0

您不夠精確,無法跟蹤這一點,但我認爲接口和實現接口的對象以及通過XMLDecoder創建的對象是由不同的類加載器創建的。這可能是原因嗎?

也看到這個問題:Solution for the ClassCastException due to ClassLoader issue

+0

好了,我還有一個類加載器,它加載插件,但這個類加載器線程引起的問題是系統類加載器 – Staphy

+0

他們要麼需要加載來自相同的類加載器,或者必須從加載該子類型的父類加載器加載基類型。如何加載XMLEncoder和VoteType相關的類加載器? – nitind

+0

系統類加載器加載這兩個類。我的問題是爲什麼它會在eclipse中正常工作,但是一旦將它導出到可執行jar文件就開始行爲不端。即使instanceof操作符返回false當我檢查是否(se​​rializedVote instanceof VoteType) – Staphy