Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 1.6 arraylist对象无法转换为字符串_Java_String_Arraylist - Fatal编程技术网

java 1.6 arraylist对象无法转换为字符串

java 1.6 arraylist对象无法转换为字符串,java,string,arraylist,Java,String,Arraylist,我在阅读高峰期列表中的内容时遇到问题。我收到的错误是java.lang.object无法转换为java.lang.String。 在我使用Java1.6时,有没有解决这个问题的方法 Delegate.java List peakPeriod = new ArrayList(); try{ peakPeriod = Dao.retrievePeakPeriod("2017"); for (Iterator i=peakPeriod.iterator(); i.hasNext()

我在阅读高峰期列表中的内容时遇到问题。我收到的错误是java.lang.object无法转换为java.lang.String。
在我使用Java1.6时,有没有解决这个问题的方法

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;
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;
}
DaoImpl.java

public List retrievePeakPeriod(String year) throws DataAccessException;
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;
}
您不必将其强制转换为字符串-java将自动调用toString()方法,因此上述方法相当于:

System.out.println("Peak Periods:"+ i.next().toString());
如果列表可以为空,则可以执行更安全的操作,例如:

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

编辑:这假设返回的对象有一个有用的toString表示,并且它是您想要的。否则,您需要找出返回的对象的类型(类),并根据需要对其进行处理。

不要使用原始类型。您的查询返回一个列表。所以很有可能将其元素转换为字符串会失败。谢谢并理解。然而,我不能使用Java1.6,但必须使用arraylist来检索结果。在Java6的第一个版本问世前2年。所以,是的,您肯定可以在Java6中使用泛型。感谢您的快速回复。我尝试了上述3种解决方案,但结果相似。峰值时段:[Ljava.lang.Object;@40dc76dd峰值时段:[Ljava.lang.Object;@49ffc86f峰值时段:[Ljava.lang.Object;@37c0155d峰值时段:[Ljava.lang.Object;@23baa943峰值时段:[Ljava.lang.Object@33be8008@JanosFang这显示了我在评论中告诉你的:你的查询返回的是一个列表,而不是一个列表。两个字段怎么可能(cal.startdate和cal.enddate)是否存储在单个字符串中?@JBNizet感谢JBNizet确定原因。是我的错误没有考虑参数。