考虑一下:
//members is a table.
String sql="select * from members";
Query query = session.createSQLQuery(sql);
List list = query.list();
/***Ist part**This part is working well.******************************/
for(int j=0;j<list.size();j++){
Object [] obj= (Object[])list.get(j);
for(int i=0;i<obj.length;i++)
System.out.println(obj[i]);
}
/***2nd part********This part is not working.Why???******************/
for( Object[] objArr : list){ //---------->(1)
for(Object m:objArr){
System.out.println(((Member)m).getFirstname());
}
}
我想问的是,为什么语句(1)给出了以下错误,尽管 list 中的每个元素都是Objects数组,即Object []:
compile:
[javac] E:\prac java progs\hiber3\src\Dao.java:45: incompatible types
[javac] found : java.lang.Object
[javac] required: java.lang.Object[]
[javac] for( Object[] objArr : list){
[javac] ^
[javac] 1 error
答案 0 :(得分:1)
将list
List
(意为List<?>
)投放到List<Object[]>
。
我的意思是
List<Object[]> list = (List<Object[]>)query.list();
答案 1 :(得分:1)
您的列表声明为List
。这是一种原始类型,因此Java编译器不知道列表中的内容。它只知道它包含Object
的实例,因为Java中的类扩展了Object。所以
for (Object[] objArr : list)
无法编译,因为您尝试将类型为Object
的对象分配给类型为Object[]
的变量。需要演员才能做到这一点。
所以,有两个解决方案。您知道该列表实际上包含Object[]
个实例,因此您将列表转换为List<Object[]>
:
List<Object[]> list = (List<Object[]>) query.list();
for(Object[] objArr : list) {
或者您将列表的每个元素都投射到Object[]
:
for (Object o : list) {
Object[] objArr = (Object[]) o;