标签:
RTTI( Run-Time Type Information)的主要作用就是运行期鉴定对象的类型,比如需要塑形的时候,使用instanceof判断类型的时候。Java用Class对象实现自己的RTTI功能,在class对象上能得到未知对象的类型信息。有三种方式能得到Class对象
反射要解决的的问题是: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章
标签:
原文地址:http://my.oschina.net/u/1583086/blog/360402