我有这个方法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);
请让我,如何解决此错误?
答案 0 :(得分:2)
为什么要创建一个Object数组而不是Bag对象数组?
尝试将第一行更改为Bag[] bagArray = new Bag[1]
。
由于Object
数组可以包含任何类型的对象,因此我认为它不能转换为Bag
数组。但是,您可以将bagArray[0]
投射到Bag
对象。
将来,尝试使用List或其他集合而不是数组来处理这样的事情。
答案 1 :(得分:1)
问题是bagArray
是Object
的数组,而不是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)