Обход результатов createSQLQuery с использованием for-each - PullRequest
1 голос
/ 19 января 2012

Учтите это:

//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) выдает следующую ошибку, несмотря на то, что каждый элемент в списке является массивомобъектов т.е. объект []:

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

Ответы [ 2 ]

1 голос
/ 19 января 2012

Ваш список объявлен как 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;
1 голос
/ 19 января 2012

Cast list, что List (что означает List<?>) до List<Object[]>.

Я имею в виду

List<Object[]> list = (List<Object[]>)query.list();   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...