2015-02-09 239 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