2017-02-19 6 views
0

У меня проблема с чтением содержимого в моем списке пикового диапазона. Ошибка, которую я получил, - java.lang.object не может быть добавлена ​​в java.lang.String.
Есть ли возможный обходной путь для этой проблемы, поскольку я использую java 1.6?Объект java 1.6 arraylist не может быть преобразован в строку

Delegate.java

List peakPeriod = new ArrayList(); 
try{ 
    peakPeriod = Dao.retrievePeakPeriod("2017"); 
for (Iterator i=peakPeriod.iterator(); i.hasNext(); { 
    System.out.println("Peak Periods:"+(String)i.next()); 
} 
catch(Exception e){ System.out.println("Error:"+e);} 

Dao.java

public List retrievePeakPeriod(String year) throws DataAccessException; 

DaoImpl.java

public List retrievePeakPeriod(String year) throws DataAccessException { 
    List list = getHibernateTemplate().find("select cal.startdate,cal.enddate from Calendar cal " + 
      "where to_char(cal.startdate,'yyyy') = ?", 
      new Object[] { year }, 
      new Type[] { Hibernate.STRING }); 

    return list; 
} 
+1

Не используйте необработанные типы. http://stackoverflow.com/questions/2770321/what-is-a-raw-type-and-why-shouldnt-we-use-it. Ваш запрос возвращает список . Поэтому вполне ожидаемо, что приведение его элемента в String завершится неудачно. –

+0

Спасибо и поняли. Однако я не мог использовать <> для java 1.6, но мне приходилось использовать arraylist для получения результатов. –

+0

Дженерики были представлены на Java 5, в 2004 году, так 13 лет назад. За 2 года до выхода первой версии Java 6. Итак, да, вы определенно можете использовать generics в Java 6. –

ответ

1
System.out.println("Peak Periods:"+ i.next()); 

Вы не должны бросить его в строку - Java автоматически вызывается метод ToString(), так что выше эквивалентно:

System.out.println("Peak Periods:"+ i.next().toString()); 

Если ваш список может иметь аннулирует, вы можете сделать что-то безопаснее, такие как:

System.out.println("Peak Periods:"+ String.valueOf(i.next())); 

Edit: Это предполагает, что возвращаемый объект имеет полезное представление ToString, и это то, что вы хотите. В противном случае вам нужно будет выяснить тип (класс) объекта(), который возвращается, и сделать с ним то, что вы хотите.

+0

Спасибо за быстрый ответ. Я попробовал решение 3 выше, но результат схож. Пиковые периоды: [Ljava.lang.Object; @ 40dc76dd Пиковые периоды: [Ljava.lang.Object; @ 49ffc86f Пиковые периоды: [Ljava.lang.Object; @ 37c0155d Пиковые периоды: [Ljava.lang.Object; @ 23baa943 Пиковые периоды: [Ljava.lang.Object; @ 33be8008 –

+0

@JanosFang Что показывает, что я говорю вам в своем комментарии: ваш запрос возвращает список , а не список . Как можно сохранить два поля (cal.startdate и cal.enddate) в одной строке? –

+0

@JBNizet Спасибо JBNizet за определение причины. Это была моя ошибка, которая не учитывала параметры. –

Смежные вопросы