RTTI:run time type identification,运行时类型识别;
首先这个是个啥东西,其实就是字面意思,在运行期间获取类型的信息。
那么运行时类型确认,究竟有什么作用呢?
书上说主要是四个方面:
1.传统的类型转换:
比如(Integer) aaa,类似这种类型转换,那么RTTI就是确保了类型转换的正确性,如果说有错误的话,那么就会直接抛出一个ClassCastException异常;
2.获取代表对象类型的Class对象:
首先来看最基本的class对象,类型信息在运行时就是通过Class对象所表示的,我们来看下这个对象的方法,
是的Class也是Object对象,它有几个非常经典的方法:
forName();
newInstance();
getFileds();
getMethods();
看出来了吧,如果想在程序运行的时候,获取到某个类的一些相关信息。这个时候它就可以派上用场,举个简单的例子,如果你拿到了某个类,想获取这个类下面的所有方法,就可以利用Class对象提供的方法去做这个事情;
3.Instance of
这个是另一种表现形式,就是用对象的实例instance of 类对象,来判断是否是某个类的实例,如果是的话,就可以强制转换,这个虽然确实挺有用的,但是觉得和前两种比起来稍显得有些不足;
4.还有就是利用泛型对 Class 对象进行类型限定
举个例子
Class<Integer> intClass = int.class; // legal
intClass = double.class; // illegal
通过泛型的方式可以对这个类做更加严格的限制,但是我自己觉得这个其实是在编译期做的事情,谈不上运行时的概念。
网友评论