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 ...
随机推荐
- all about
1.三次握手和四次挥手?2.什么是OSI七层结构?3.http vs https?4.what is Ping?基于什么协议?使用方法?5.DNS?6.cookie vs session?7.LDAP ...
- CS61A hw01
前不久在知乎上看到CS61A 和CS61B spring18 开课的消息.上去看了一眼,发现真的不错,所有proj hw都可以本地测试!也就是说除了没有课程成绩和官方讨论区和TA解答外,这个课完全可以 ...
- Android JNI 学习(三):JNI 数据类型和数据结构
本文我们来讨论一下JNI如何将Java类型映射到本机C类型. 一.基本数据类型 如下图表整理了Java基本类型和native对应的关系: Java类型 Native类型 描述 boolean jboo ...
- mysql命令行创建表,插入表数据
create table t_hero( id int unsigned auto_increment primary key, name varchar(10) unique not null, a ...
- CCS3怎么实现border边框渐变效果
下图注册按钮的边框有渐变效果,如果让你来实现,你会怎么做呢 个人觉得,省事的做法,直接让UI给背景图片就可以了,如下图 不过这种做法感觉不太灵活,如果要修改border的渐变颜色,就需要UI重新做图. ...
- dubbo实用知识点总结(二)
1. 参数验证 2. 结果缓存 3. 泛化引用 客户端没有对应接口类的情况,可以直接调用 4. 泛化实现 5. 回声测试 用于检测服务是否可用 6. 上下文信息 7. 隐式传参(不常用) 8. 异步调 ...
- Tools - 负载性能测试工具JMeter
JMeter简介 HomePage:http://jmeter.apache.org/ Apache JMeter是Apache组织开发的基于Java的开源负载性能测试工具. 可以用于对服务器.网络应 ...
- python数据抓取分析(python + mongodb)
分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...
- 两步验证杀手锏:Java 接入 Google 身份验证器实战
两步验证 大家应该对两步验证都熟悉吧?如苹果有自带的两步验证策略,防止用户账号密码被盗而锁定手机进行敲诈,这种例子屡见不鲜,所以苹果都建议大家开启两步验证的. Google 的身份验证器一般也是用于登 ...
- java开发之多线程基础篇
首先我们先来了解下线程的生命周期上一张图: Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态( ...