2015-07-20 87 views
0

我需要投從一種類型到另一個。 Google搜索但被困住了。說我要投initObjectCasted類。鑄造用NewInstance方法

Object objInstance = initObject.getClass().newInstance(); 
        Casted str=(Casted)objInstance; 

爲什麼它會使ClassCastException

+1

那麼,'initObject'的實際類是什麼,它擴展了'Casted'? – RealSkeptic

+0

不,不。任務是從任何給定類型轉換爲另一種給定類型。也許我需要動態創建類來擴展我想要投射的對象類? – Mikhail

+4

我不認爲你明白什麼是「投」指的時刻。另外,請注意,這不會嘗試轉換'initObject' - 它會創建一個initObject的值所引用的對象類型的新實例... –

回答

6

鑄造要求Casted類必須initObject類的子類或子接口。例如:

List<String> list = new ArrayList<String>(); 
ArrayList<String> castedList = (ArrayList<String>) list; //works 
Integer int = (Integer) list; // throws ClassCastException 

替代鑄造可能是一個幫助器方法,它將轉換相關的對象。這樣的例子是Collections.toArray方法。

鑄造通常是不鼓勵的,因爲你基本上告訴編譯器,你知道什麼類型的鑄造對象是,當然你可能是錯的。

+0

明白了,謝謝 – Mikhail

+1

沒問題。如果您滿意,您也可以接受我的答案 – discipliuned