今天用Hibernate的时候写了一条select min(time),max(time) from Table的查询语句,本以为返回的List内是两个Date类型的数据,可是这样的想法却导致了一个ClassCastException
原因是list内实际只有一个对象,并且这个对象是一个Object类型的对象,无论用getClass还是toString,但是按理来讲返回的要么是空,要么就应该是两个时间对象
于是将该数据转成json格式,得到的结果是["Tue May 22 22:31:58 CST 2012","Tue May 22 22:31:58 CST 2012"]
有了长度,自然就可以循环取出object内的两个时间对象了
用Array.get(object,index)方法取出这两个时间,又发现虽然是Date对象,但却不是java.util.Date,而是java.sql.Date,当然继承的java.util.Date,转成常用的类型,这个问题就彻底解决了
原因是list内实际只有一个对象,并且这个对象是一个Object类型的对象,无论用getClass还是toString,但是按理来讲返回的要么是空,要么就应该是两个时间对象
于是将该数据转成json格式,得到的结果是["Tue May 22 22:31:58 CST 2012","Tue May 22 22:31:58 CST 2012"]
很纳闷为什么输出的是一个数组类型呢,于是又将Object强转为数据,依旧ClassCastException
苦思不得其解,于是跟踪了gson (google的json库) 的源代码,经过一个多小时的研究,终于发现了一个奇妙的东西,我想对于大多数人来说都是陌生的吧,java.lang.reflect下面有一个Array类,有一个Array.getLength()的静态方法,可以获取这个表面是Object,实际是数组的对象的长度,但是前提是得知道这个对象是数组啊,于是又有了object.getClass().isArray().有了长度,自然就可以循环取出object内的两个时间对象了
用Array.get(object,index)方法取出这两个时间,又发现虽然是Date对象,但却不是java.util.Date,而是java.sql.Date,当然继承的java.util.Date,转成常用的类型,这个问题就彻底解决了