簡體   English   中英

在Java中將父類分配給子類變量

[英]Assign parent class to child class variable in Java

我有一個父類和若干子類的(我們姑且稱之為parentchild1child2child3等)。

我有一個函數,它采用parents的二維數組並將其展平為一維數組,如下所示:

public parent[] flatten(parent[][] input);

在調用上下文中,我知道當我傳遞一個數組時,所有元素都具有相同的類型,並且該類型是子類型之一(特別是,我知道它是WHICH子類型)。 我希望能夠獲取數組的特定元素,並將其分配給正確的子類型的變量,如下所示:

child1 c = flatten(input)[0];

我知道類型斷言(相關SO帖子: 斷言對象是一種特定的類型 ),但是如果斷言成功,我似乎找不到實際分配給正確類型變量的方法。 在Java中這樣的事情是否可能? 我知道它可以用其他語言,例如Go。

你真的想把它分配給某些Child類型嗎? 如果方法也在Parent類中定義,則可以使用Parent類引用來訪問Child類方法。

否則,您可以鍵入強制轉換為適當的類型:

child1 c = (child1)flatten(input)[0];

但是,您應該確保該類型僅為child1 通常,類型轉換不是一個好主意。 這是代碼不好的標志(但並非總是如此)。 你應該盡量避免它。

嘗試“鑄造”,像這樣:

Child1 c = (Parent)flatten(input)[0];

我認為值得一提的是,如果您不想使用異常處理,您可以檢查對象的實例。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof

TL; DR:檢查您要投射到的類的實例。

if (flatten(input)[0] instanceof child1)
       Child1 c = (Parent)flatten(input)[0];

你不能分配通用數組 ,但是如果你願意傳遞一個out-param,你可以使用泛型來為你處理轉換:

 public <T extends Parent> boolean addAll(T[][] input, 
                                          T[] output) {
   //set up you indices
   output[x] = input[z];
   return true;
}

如果傳入不匹配的輸入/輸出,則會出現運行時錯誤,否則它應該正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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