RTTI VS Reflection


1.RTTI( Run-Time Type Information)

    RTTI( Run-Time Type Information)的主要作用就是运行期鉴定对象的类型,比如需要塑形的时候,使用instanceof判断类型的时候。Java用Class对象实现自己的RTTI功能,在class对象上能得到未知对象的类型信息。有三种方式能得到Class对象

1. Class.forName("packagename + classname")
2.ClassName.class
3.object.getClass()

2.反射

    反射要解决的的问题是:1.对于不在自己程序空间内的对象该怎么处理,2.通过网络创建与执行位于远程系统上的对象 ,即"远程方法调用",比如进行分布式计算。

    针对Field,Method以及Constructor类(每个都实现了Memberinterface——成员接口),它们都新增了一个库:java.lang.reflect。这些类型的对象都是JVM在运行期创建的,用于代表未知类里对应的成员。在class对象上我们可调用方法getFields(),getMethods(),getConstructors(),分别返回用于表示字段、方法以及构建器的对象数组(在联机文档中,还可找到与Class类有关的更多的资料),这样便可用构建器创建新对象,用get()和set()方法读取和修改与Field对象关联的字段,以及用invoke()方法调用与Method对象关联的方法。并且,通过利用Class对象的newInstance()方法可以达到 :“尽管我不知道你的准确类型是什么,但请你无论如何都正确地创建自己。”这样,通过反射java就实现了能对未知对象进行处理的功效。                            

    当然,通过反射还能得到一个类的结构信息,比如通过getSuperclass()就能得到父类Class对象,通过getInterfaces()能得到实现的接口。

参考:java思想四版 第11章

转载于:https://my.oschina.net/u/1583086/blog/360402

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值