簡體   English   中英

自定義對象投射方法

[英]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;

如果BA的子類,則上述應該起作用,並且不需要強制轉換:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM