遇到对象类型是Object,实际却是数组的问题
2012-05-22 22:39
309 查看
今天用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强转为数据,依旧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,转成常用的类型,这个问题就彻底解决了
原因是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,转成常用的类型,这个问题就彻底解决了
相关文章推荐
- unity lua C# 这边 new 了一个GameObject 对象并发给Lua那边, 这时C# 这边在通过GC释放掉这个对象;lua 那边会报错;遇到这种问题的解决方案
- JAVA基础 day23 IO流的其他类 (对象的序列化 管道流 RandomAccessFile类(随机读取文件) DateStream(操作基本数据类型的流) 操作数组的流 )字符编码问题
- 遇到“拒绝了对对象的 EXECUTE 权限”和“无法作为数据库主体执行,因为主体 "dbo" 不存在、无法模拟这种类型的主体,或您没有所需的权限”的问题
- 项目中遇到实际问题,两个数组接收一个数组中的值,分别对应奇数位和偶数位
- C# 反射给对象属性赋值遇到的问题——类型转换
- C++初始化列表问题,类中有一个对象类型的数组成员变量,在初始化列表中初始化时报错“[]”操作符语法错误
- 将DataTable转换为List<T>对象遇到问题:类型“System.Int64”的对象无法转换为类型“System.Int32”
- JNI数组类型转换遇到问题及解决(new jdouble(len)与new jdouble[len]的区别)
- 如何得知一个__ComObject对象的实际类型
- 使用Gson解析Json数组遇到的泛型类型擦除问题解决方法
- 浅谈Vue2.2.0源码(一)-- 查询一个object类型对象在一个object数组中的索引
- 关于对象动态类型的一些问题 Object-C 2.0
- Intent 传递简单类型, 数组, Object对象,与ArrayList<T> 类型数据
- 把传过来的Object对象转换成Collection类型的对象。isArray()方法,判定此Class对象是否表示一个数组类。java.lang.reflect.Array 对任意数组进行操作
- 学习笔记——ajax传值数组对象中遇到的问题
- springMVC之对象中的基本类型数据绑定遇到的问题
- 数据类型与NSMutableArray添加对象(insertObject)引起的问题
- 『C++ Primer学习笔记』Chapter 3——string对象、vector对象以及数组的配套类型,C风格字符串问题和处理区别
- 区别类型为object的对象、数组和日期
- 反射给对象赋值遇到的问题——类型转换[转http://blog.csdn.net/xiaohan2826/article/details/8536074]