解决此代码中的ClassCastException

时间:2011-10-25 11:00:19

标签: java

我有这个方法getData,如图所示。 它期待一个袋对象的数组,如图所示 请参阅以下代码:

public static String getData(Bag[] bag)
 {

 }

public class Bag
{
 public char side;
}

但是,当我尝试我得到ClassCastException时。 我这样做了:

Object bagArray[] = new Object[1];
Bag  bagData = new Bag();
bagData.side = 'S';
bagArray[0]=bagData;
String bagData = ApplicationUtil.getData(Bag[]) bagArray);

请让我,如何解决此错误?

5 个答案:

答案 0 :(得分:2)

为什么要创建一个Object数组而不是Bag对象数组?

尝试将第一行更改为Bag[] bagArray = new Bag[1]

由于Object数组可以包含任何类型的对象,因此我认为它不能转换为Bag数组。但是,您可以将bagArray[0]投射到Bag对象。

将来,尝试使用List或其他集合而不是数组来处理这样的事情。

答案 1 :(得分:1)

问题是bagArrayObject的数组,而不是Bag的数组。

将其更改为Bag bagArray[] = new Bag [1];或使用Collection(例如List) - 请注意您可以将List<Object>投射到List<Bag>这是一种不安全的操作,除非你知道你正在做什么,否则不推荐。

答案 2 :(得分:0)

您正在尝试将Object []转换为Bag []。不允许。

答案 3 :(得分:0)

你bagArray是一个Object数组而不是Bag数组。仅仅因为它能够持有Bag类型的对象(它是Object的子类),并不意味着反之亦然。您正在尝试将Object转换为Bag类型,这是不允许的。按以下方式定义包数组

Object bagArray[] = new Bag[];

答案 4 :(得分:0)

请参阅此问题:Quick Java question: Casting an array of Objects into an array of my intended class

正如其他人所说,你不能把对象[]强加给任何东西。在这种情况下,你在一个Object数组中有一个Bag,所以在这个特定的实例中它似乎可能有效。但想象你有一个更大的阵列,充满了不同类型的对象。在这种情况下,演员阵容不起作用。该计划必须适用于一般情况。

您可以通过以下方式解决此问题: 1)使用Bag []类型而不是Object [] 2)使用列表 - 集合几乎总是更好 3)使用Arrays类创建一个新的Bag []:Arrays.copyOf(bagArray,bagArray.length,Bag [] .class)