我想知道你是否可以将一个对象[]转换为另一个类的另一个对象[]。
这是我尝试过的,但很明显它没有用。
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无法解析为某种类型。
答案 0 :(得分:1)
你在做什么
myCollection[i] = (BaseBallCard[]) Collection[i];
你应该做什么
myCollection[i] = (BaseBallCard) Collection[i];
逐个转换每个对象
需要条件
您可以转换为Object类型,然后根据某些条件(如Object.getClass())将其转换为某种不同类型的Object。表示您应该具有相同的Object1.getClass().getName()
和Object2.getClass().getName()
答案 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];
}
}
您甚至可以跳过明确的演员,因为Collection
是BaseBallCard[]
。