《Java编程思想》(第二版)第12章:执行期型别辨识(上)

来源:百度文库 编辑:神马文学网 时间:2024/04/28 10:33:18
RTTI的初期想法非常简单:当有一个指向基础型别base type的reference时,RTTI机制让你的一找出其所指的确切型别。
java中存在两种形式的rtti:传统的rtti;reflection机制
为什么要使用rtti?上面的目的就是原因,比如向下转型downcasting/强制转型.
Class对象以及他的装载时机。
如何取得某个类/对象的Class对象?
Class.forName("Gum");//不需要具体的对象,不过可能导致执行期异常,比如说找不到Gum类
x.class;
x.getClass();//需要具体的对象x
转型之前类型检查:(避免执行期异常ClassCastException)
1.传统转型(Shape)..
2.操作Class对象
3.instanceof if(x instanceof dog) //x是dog对象么?或者是dog的派生类对象么?
Java运用Class对象来执行其RTTI机制——即使你所作的只是转型动作。
Class类型里面的几个有用的函数
getInterfaces()  :Class[] //返回一系列接口的class对象。
newInstance() :Object   //虚拟构造函数:我不知道你具体是什么东西,不过你给我适当的生成一个
static Class.forName("Gum"):Class
isInterface():bool    //判断某个Class对象是否为interface.
getName():string     //得到Class对象所属的类型的名字。
getSuperclass()
总之,有了某个类的Class对象,他的祖宗十八代都可以查出来。
事实上。RTTI和多态上有重复的功能,先尝试使用多态,最后才使用RTTI,记住,不要滥用RTTI.