将对象[]转换为另一个对象[],是否可能?

时间:2015-02-09 16:21:23

标签: java arrays

我想知道你是否可以将一个对象[]转换为另一个类的另一个对象[]。

这是我尝试过的,但很明显它没有用。

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

当我尝试将集合Object []转换为BaseballCard时,我收到错误。

我之前做了一个

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

我尝试了myCollection [i] =(BaseballCard)Collection [i]。给我一个错误,说BaseballCard无法解析为某种类型。

3 个答案:

答案 0 :(得分:1)

你在做什么

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

你应该做什么

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

逐个转换每个对象

需要条件

您可以转换为Object类型,然后根据某些条件(如Object.getClass())将其转换为某种不同类型的Object。表示您应该具有相同的Object1.getClass().getName()Object2.getClass().getName()

Source1 Source2

答案 1 :(得分: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。

答案 2 :(得分:0)

在您的具体情况下,您可以实现您想要的目标:

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

您甚至可以跳过明确的演员,因为CollectionBaseBallCard[]