2012-11-06 45 views
-1

如何將子類轉換爲具有相同超類的另一個子類?我知道它不允許直接從子類轉換爲子類。另一種方式? ID被設置爲超類,所以創建新對象並不好。我正在使用它作爲狀態模式。如果狀態發生變化,那麼類的類型應該改變。將子類轉換爲另一個子類

@Entity 
public class Request() {} 

@Entity 
public class OpenRequest extends Request() {} 

@Entity 
public class CloseRequest extends Request() {} 

感謝

+0

您知道在運行時可能會失敗,即使您有解決方法嗎? –

+0

狀態模式也與您描述的不同:一個請求應該有一個狀態,而不是一個狀態。 –

+0

Rohit,它在運行時失敗。 – argonist

回答

6

這是不可能的。如果你可以這樣做,你總是可以引用任何其他類的引用,因爲所有的類都是Object的子類。
您將不得不創建所需類的新實例,並手動傳輸信息。

+0

好的,我將創建一個新實例。謝謝 – argonist

1

您不會投放課程,您會投入參考實例的課程。並且請注意,如果您有一個子類的實例並將其轉換爲另一個子類,則會導致運行時錯誤。您只能投些東西(例如,您可以投OpenRequest作爲Request,因爲所有OpenRequest都是Request s);如果您嘗試將其強制轉換爲不可行(例如將OpenRequest轉換爲CloseRequest),那將會失敗。

+1

'你投了類的實例' - >確切地說: - '你將類的實例投入引用 –