Object类型转换成自定义类型(向下转型)
Object类型转换成自定义类型
场景:
从数据库或者别的途径接收对象的时候用Object,但是用的时候怎么object点(方法提示 | alt+'/'),都点不出自定义类型的方法。
比如,数据库查询Customer的时候,用Object来接收,那么想要调用Customer中的getCust_Id()方法,你会发现用Object怎么都点不出来。我之前头疼了很多次,今天做小demo,又碰巧用object接收,运气好的是这次我貌似琢磨出怎么转型了。
1.转型前(查询出来每条数据由一个Customer对象和Order对象组成,但是用的是Object接收)
(普通内连接提到的是前两章学习Hibernate的总结(Hibernate(十三)迫切内连接fetch)
/**
* 普通内连接
*/
@Test
public void fun(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction(); List<Object[]> list = session.createQuery("from Customer cst inner join cst.ods").list();
for (Object[] objects : list) {
System.out.println(Arrays.toString(objects));
} tx.commit();
session.close();
}

2.向下转型后(将接收的两个Object对象分别向下转型为Customer和Order对象)
/**
* object类型转换成自定义实体类型
*/
@Test
public void fun2(){
Session session = HibernateUtils.getSession();
Transaction tx = session.beginTransaction();
//查询用户(因为是普通内连接,所以会每一条数据会封装成两个对象,一个是Customer,一个是Order)
List<Object[]> list = session.createQuery("from Customer cst inner join cst.ods").list();
System.out.println("--------------------------------------------------------------------------------------------------------");
for (Object[] objects : list) {
//这里的length是其实就是2
for(int i = 0;i < objects.length;i++){
//如果第i个对象是Customer的实例
if (objects[i] instanceof Customer) {
//就实例化Customer对象,将第一个object对象向下转型
Customer c = (Customer) objects[i];
//打印Customer对象中的属性
System.out.println("用户ID:" + c.getCust_id() + "\t" + "用户名:" + c.getCust_name());
//后面就不需要执行了
continue;
}else if(objects[i] instanceof Order){
Order od = (Order)objects[i];
System.out.println("订单编号:" + od.getOrder_id() + "\t" + "订单明细编号:" + od.getDetail_id());
continue;
}else{
System.out.println("object[" + i + "]" + "不是Customer的实例也不是Order的实例~");
}
}
System.out.println("--------------------------------------------------------------------------------------------------------");
}
tx.commit();
session.close();
}
部分查询结果:

总结:首先,我感觉我有很多词汇用的不恰当或者概念理解错误,比如,这个应该是向下转型把....
想明白了还挺开心的(虽然问题有点弱智...),然后再转型之前加上了判断是否是这个类型(instanceof),保证了程序的合理性。
想到刚刚在哪里,什么Class.forName,什么newInstance,getMethod在哪里瞎鼓捣反射就无语...
Object类型转换成自定义类型(向下转型)的更多相关文章
- 如何将Object类型转换成String类型
1. Object.toString() obj.toString() 注意:必须保证Object不是null值,否则将抛出NullPointerException异常. 2. (String)Obj ...
- java从Object类型转换成double类型
java从Object类型转换为double类型: Map<String,Object> map = new HashMap<String,Object>(); map.put ...
- Java 类型转换以及Object转成其他类型
Object转int int count=(int)map.get("count") int count=Integer.parseInt((String)map.get(&quo ...
- C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)
在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...
- oracle Clob类型转换成String类型
转载:https://www.cnblogs.com/itmyhome/p/4131339.html Clob类型转换成String类型 oracle中表结构如下: create table GRID ...
- sqlserver搜索中怎么把varchar类型转换成numeric类型
sqlserver搜索中怎么把varchar类型转换成numeric类型 可以用cast来转换 如:列名叫grade,表名为A select cast(grade as numeric(y,x)) f ...
- Java byte类型转换成int类型时需要 & 0XFF的原因
Java byte类型转换成int类型时需要 & 0XFF的原因 假设有byte b = -1; 那么b的二进制是:1111 1111. 如果将b直接转换为int类型,那么二进制是 1111 ...
- C++类型转换 -- 由其他类型转换到自定义类型
由其他类型转换到自定义类型 由其他类型(如int,double)向自定义类的转换是由构造函数来实现,只有当类的定义和实现中提供了合适的构造函数,转换才能通过. /******************* ...
- 基本类型转换成NSNumber类型
int i=100; float f=2.34; NSNumber *n1=[NSNumber numberWithInt:i]; NSNumber *n2=[NSNumber numberWithF ...
随机推荐
- 2018年3月24日上海MVP线下技术交流活动简报
2018年3月24日下午,几位上海MVP自发组织了一次线下的技术交流会,主要由MVP胡浩牵头,我(陈晴阳).刘鑫.朱兴亮和胡浩各自做了一次主题演讲,具体主题是: 陈晴阳:<这还是我认识的Visu ...
- js实用方法记录-指不定哪天就会用到的js方法
js实用方法记录-指不定哪天就会用到的js方法 常用或者不常用都有 判断是否在微信浏览器中 测试代码:isWeiXin()==false /** * 是否在微信中 */ function isWeix ...
- elasticSearch新认知
之前已经学习使用过ElasticSearch的使用,今天补充巩固一下... 上一次的环境是在 linux下使用 EalsticSearch(安装教程详见:https://www.cnblogs.com ...
- 快速找出网站中可能存在的XSS漏洞实践(一)
一.背景 笔者最近在慕课录制了一套XSS跨站漏洞 加强Web安全视频教程,课程当中有讲到XSS的挖掘方式,所以在录制课程之前需要做大量实践案例,最近视频已经录制完成,准备将这些XSS漏洞的挖掘过程记录 ...
- 吴恩达机器学习笔记24-神经网络的模型表示1(Model Representation of Neural Network I)
神经网络模型建立在很多神经元之上,每一个神经元又是一个个学习模型.这些神经元(也叫激活单元,activation unit)采纳一些特征作为输出,并且根据本身的模型提供一个输出.下图是一个以逻辑回归模 ...
- 微信小程序中的app.js-清除缓存
微信小程序中的app.js 关于小程序app.js生命周期的介绍 App(Object) App() 函数用来注册一个小程序.接受一个 Object 参数,其指定小程序的生命周期回调等. App() ...
- Web Components(续)
概述 之前我们介绍了Web Components的基本概念,现在我们给出一个使用Web Components的实例代码,并且对组件化进行一些思考.记录下来,供以后开发时参考,相信对其他人也有用. 实例 ...
- document.getElementById 和 document.getElementsByClassName获取DOM元素的区别
想必小伙伴们对于 JS 获取DOM的几种方法早已烂熟于心,了然于胸, 尤其是 document.getElementById 和 document.getElementsByClassName, ...
- Spring详解(六)------AspectJ 实现AOP
上一篇博客我们引出了 AOP 的概念,以及 AOP 的具体实现方式.但是为什么要这样实现?以及提出的切入点表达式到底该怎么理解? 这篇博客我们通过对 AspectJ 框架的介绍来详细了解. 1.什么是 ...
- Python - 浅谈Python的编译与反编译
1 - Python编译过程涉及的文件 py 源代码文件,由python.exe解释,可在控制台下运行,可用文本编辑器进行编辑: pyc 源代码文件经过编译后生成的二进制文件,无法用文本编辑器进行编辑 ...