java.lang.ClassCastException:[Ljava.lang.Object;无法施展

时间:2015-11-17 17:46:12

标签: java

我在java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to ...model.MyClassAttributes获得for(MyClassAttributes mc : atList)例外,即使我已对该实体进行投射。

List<MyClassAttributes> atList = new ArrayList<MyClassAttributes>();
atList=(List<MyClassAttributes>)session.createSQLQuery(SELECT_QR_SQL).setLong("rec", rec).list();
for(MyClassAttributes mc : atList)
{

}

当我检查编译的类时,它似乎没有更新。

atList = session.createSQLQuery("Select col from....").setLong("rec", rec.longValue()).list();

这里有什么问题?

2 个答案:

答案 0 :(得分:0)

Java在运行时不知道任何泛型。这被称为“类型擦除”。由于list()方法已经返回List<A>,因此将其类型转换为其他List<B>(其中BA的子类)不会产生任何额外的字节码。

注意ClassCastException循环中for的出现方式,而不是赋值。使用循环变量你(以及编译器,因为你之前投过)假设List仅包含nullMyClassAttributes个对象,但显然情况并非如此,因为抛出异常。

答案 1 :(得分:-1)

你能试试吗? 不要初始化List对象。只是宣布它 例如 -

List<MyClassAttributes> atList;

演员表工作的原因是 - 你有一个List个实例,里面有ArrayList个对象。 sqlQuery<>.list()函数返回List

演员只有在&#39;是-a&#39;关系很满意。

ArrayList是-a(始终)List。因此,您可以将ArrayList实例强制转换为List。但List可能始终不是ArrayList。所以演员阵容不起作用。