2015-02-09 315 views
-2

我想知道你是否可以將一個對象[]轉換爲另一個類的另一個對象[]。將對象[]轉換爲另一個對象[],有可能嗎?

這是我嘗試做的,但顯然它不工作。

public CardCollection() { 
    CardCollection[] myCollection = new CardCollection[MAX_CARDS]; 
    for(int i = 0; i < myCollection.length; i++){ 
     myCollection[i] = (BaseballCard[]) Collection[i]; 
    } 
} 

我在嘗試將集合對象[]轉換爲BaseballCard時出現錯誤。

我以前曾作了

BaseBallCard[] Collection = new BaseBallCard[MAX_CARDS]; // MAX_CARDS=100; 

我試圖MyCollection的[I] =(BaseballCard)收集[i]中。給我一個錯誤,說BaseballCard不能解析爲類型。

+0

什麼是'收藏'這裏? – 2015-02-09 16:22:54

+0

[將Object數組轉換爲Integer數組錯誤](http:// stackoverflow。com/questions/1115230/cast-object-array-to-integer-array-error) – Simulant 2015-02-09 16:26:25

+5

你不是將一個對象[]轉換爲另一個對象[]。您正在將對象投射到對象[]。 – 2015-02-09 16:27:22

回答

0

在特定情況下,可以實現你想要的,因爲這是什麼:

public CardCollection() { 
    CardCollection[] myCollection = new CardCollection[MAX_CARDS]; 
    for (int i = 0; i < myCollection.length; i++){ 
     myCollection[i] = (BaseBallCard) Collection[i]; 
    } 
} 

你甚至可能跳過explicite投,作爲Collection是一個BaseBallCard[]

+0

我開始的時候這樣做,但它給了我一個BaseballCard的錯誤,說不能解析爲一個類型。所以我試着把它作爲BaseballCard []。 :/ – user3083893 2015-02-09 16:36:58

+0

是的,因爲第二個'B'是* capital *! – meskobalazs 2015-02-09 16:38:03

+0

仍然不起作用 – user3083893 2015-02-09 16:39:06

1

你在做什麼

myCollection[i] = (BaseBallCard[]) Collection[i]; 

你應該做的

myCollection[i] = (BaseBallCard) Collection[i]; 

把每個對象逐個

條件要求

可以轉換爲對象類型然後再將它投射到如此我基於某些條件(如Object.getClass())的不同類型的對象。意味着你應該有相同的Object1.getClass().getName()Object2.getClass().getName()

Source1Source2

1

如果BaseBallCard是CardCollection的子類,你的代碼可以更正如下:

public CardCollection() { 
    CardCollection[] myCollection = new CardCollection[MAX_CARDS]; 
    for(int i = 0; i < myCollection.length; i++){ 
     myCollection[i] = (BaseBallCard) Collection[i]; // note BaseBallCard not [i] 
    } 
} 

或者更容易使用Arrays.copyOf()

public CardCollection() { 
    CardCollection[] myCollection = Arrays.copyOf(Collection, MAX_CARDS, BaseBallCard.class); 
} 

但是如果BaseBallCard是一個子類的CardCollection,然後每次創建BaseBallCard時,都會隱式調用此構造函數(因爲它是父類型的默認構造函數),並且每次製作BaseBallCard時都會創建一個新的CardCollection數組。你不是真的想要這樣,相信我。

你可能試圖做的,給定類的命名,是在CardCollection中存儲BaseBallCard []。

public CardCollection() { 
    BaseBallCard[] myCollection = new BaseBallCard[MAX_CARDS]; 
    // just create the array - don't try to populate it in the constructor 
} 

然後你可以有不同的方法來從CardCollection添加和刪除BaseBallCard。

+0

哦。所以我所要做的就是擴展CardCollection for BaseballCard類。不錯。至於Arrays.copyof()。我無法使用它。顯然,如果我這樣做,那麼hw就太容易了。所以我們必須手動完成所有工作。教授和他們的侷限性。 QQ ..但是那修復了一切。 O_O – user3083893 2015-02-09 16:46:52

+0

請閱讀我答案的後半部分;你幾乎可以肯定*不想*使BaseBallCard擴展CardCollection並使用你問題中的代碼。 – 2015-02-09 16:50:01

+0

我做了一個BaseBallCard類型的對象[],每當我嘗試使用CardCollection類中的方法時,它都不起作用。 , \t} – user3083893 2015-02-09 16:53:04

相關問題