我在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();
这里有什么问题?
答案 0 :(得分:0)
Java在运行时不知道任何泛型。这被称为“类型擦除”。由于list()
方法已经返回List<A>
,因此将其类型转换为其他List<B>
(其中B
是A
的子类)不会产生任何额外的字节码。
注意ClassCastException
循环中for
的出现方式,而不是赋值。使用循环变量你(以及编译器,因为你之前投过)假设List
仅包含null
和MyClassAttributes
个对象,但显然情况并非如此,因为抛出异常。
答案 1 :(得分:-1)
你能试试吗? 不要初始化List对象。只是宣布它 例如 -
List<MyClassAttributes> atList;
演员表工作的原因是 - 你有一个List
个实例,里面有ArrayList
个对象。 sqlQuery<>.list()
函数返回List
。
演员只有在&#39;是-a&#39;关系很满意。
ArrayList
是-a(始终)List
。因此,您可以将ArrayList
实例强制转换为List
。但List
可能始终不是ArrayList
。所以演员阵容不起作用。