RTTI

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 intClass = int.class; // legal

intClass = double.class; // illegal

通过泛型的方式可以对这个类做更加严格的限制,但是我自己觉得这个其实是在编译期做的事情,谈不上运行时的概念。

你可能感兴趣的:(RTTI)