[英]Custom Object Casting Method
如果您有兩個不同的類A和B,並且B是A的子類,則無法進行如下轉換:
A a = new A();
B b = new B();
A newA = (A)b;
有沒有辦法在沒有JVM拋出ClassCastException的情況下啟用上面的代碼(不改變上面的代碼)?
- - - - - - 編輯 - - - - -
對不起,我在上面的問題代碼中犯了一個錯誤。 正確的版本如下:
A a = new A();
B b = new B();
B newB = (B)a;
B
已經有一個是-a至關系A
。 你不需要強制轉換....你可以在任何期望/指向A
方法或引用中拋出一個B.
根據您的編輯 - 如果您想要這樣做,您的設計會出現問題。 雖然B
is-a的 A
,相反的是不正確的。 A
不是B
換句話說,由於B
擴展了A
,它可能在其上具有未在A
定義的方法/屬性。 如果將A
轉換為B
,那么接受該引用的方法可能會嘗試調用它認為在實例上的方法,因為您告訴編譯器它有一個B
,而實際上底層A
沒有所需的方法。
在這里施展只會導致痛苦和失敗。
我想你可以簡單地指定:
A newA = b;
如果B
是A
的子類,則上述應該起作用,並且不需要強制轉換:
A a = new A();
B b = new B();
A newA = b; // no need to cast!
使用新代碼,不,你不能這樣做。 您必須創建一個新對象:
B newB = new B(a);
要么
B newB = B.of(a);
無論如何,通常應該避免非抽象的非葉類。 此外,自1.5(2004年發布)以來,應該沒有太多的轉換語法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.