RTTI学习及四个实现方法
来源:互联网 发布:创盈门窗软件 编辑:程序博客网 时间:2024/05/29 16:34
原地址传送门:http://blog.csdn.net/acm_lkl/article/details/46547481
Java的RTTI
RTTI(Run-Time Type Identification,通过运行时类型识别)的含义就是在运行时识别一个对象的类型.运行时类型信息可以使得你在程序运行时发现和使用类型信息.
通俗的来讲就是我们能够在程序运行时判断一个对象是属于那个类的。
下面就来总结一下常用的RTTI的方式:
(1).直接进行类型转换,由编译器保证类型转换的正确性,如果执行了一个错误的转换就抛出一个ClassCastException异常.
就像这样:((Sub)b).g();
(2).使用instanceof. instanceof是java的保留关键字之一,也是一个双目运算符,其调用形式是:a instanceof b,用于判断a是不是b的对象,如果是则返回true,否则返回false.要注意instanceof只能对有继承关系的类进行判定.这样的话我们上面开头的那段代码就可以改成下面这种更安全的形式了:
//instanceof 判断其左边对象是否为其右边类的实例
if(b instanceof Sub){
((Sub)b).g();
}
(3)直接使用Class对象进行判断.因为每个类/对象对应的Class对象都是唯一的,所以我们可以使用Class对象作为中介进行判断.但是这种判断是可能会出错的.如下面的代码所示:
import java.util.*;
class T1{
}
class T2{
}
class T3 extends T1{
}
public class Test4{
public static void main(String[] args){
T1 t1= new T1();
T2 t2= new T2();
T3 t3= new T3();
System.out.println("t1 是 T1的对象? "+(T1.class.equals(t1.getClass())));
System.out.println("t2 是 T1的对象? "+(T1.class.equals(t2.getClass())));
System.out.println("t3 是 T1的对象? "+(T1.class.equals(t3.getClass())));
System.out.println("t1 是 T3的对象? "+(T3.class.equals(t1.getClass())));
}/*Output
t1 是 T1的对象? true
t2 是 T1的对象? false
t3 是 T1的对象? false
t1 是 T3的对象? false
*/
}
(4)使用Class类提供的isInstance()方法.这种方式类似于instanceof,
但是由于可以以函数形式调用,就可以使用的更加灵活(不用将代码组织成一大堆的instanceof).
下面的代码示范了它的用法:
import java.util.*;
class T1{
}
class T2{
}
class T3 extends T1{
}
public class Test2{
public static void main(String[] args){
T1 t1= new T1();
T2 t2= new T2();
T3 t3= new T3();
///先取得该类对应的Class对象,然后以需要检测的对象作为参数传入isInstance()方法
System.out.println("t1 是 T1的对象? "+(T1.class.isInstance(t1)));
System.out.println("t2 是 T1的对象? "+(T1.class.isInstance(t2)));
System.out.println("t3 是 T1的对象? "+(T1.class.isInstance(t3)));
System.out.println("t1 是 T3的对象? "+(T3.class.isInstance(t1)));
}/*Output
t1 是 T1的对象? true
t2 是 T1的对象? false
t3 是 T1的对象? true
t1 是 T3的对象? false
*/
}
阅读全文
0 0
- RTTI学习及四个实现方法
- Spring装配集合的四个方法及实现
- Spring装配集合的四个方法及实现
- RTTI及多态的实现机制
- BaseAdapter需实现的四个方法介绍
- BaseAdapter需实现的四个方法介绍
- App主界面Tab四个实现方法
- typeid及RTTI
- 职业人士日常学习的四个方法
- rtti实现c++反射
- 手工实现RTTI
- C++中的RTTI实现
- MFC RTTI 实现
- MFC RTTI实现原理
- C++ RTTI 实现
- MFC的RTTI实现
- C++实现机制RTTI
- 一种 RTTI 的实现
- 当使包含 applet 程序的页面最小化时
- PowerDesigner连接MySQL逆向生成物理模型
- ubuntu server安装ntp
- vim命令显示行号
- select机制
- RTTI学习及四个实现方法
- 不认识String、StringBuffer和StringBuilder这三兄弟的同学赶紧进来
- 学习笔记32-设计模式
- Django(二)--初相见
- openjudge 开餐馆(动态规划)
- 随机等概率的输出m个不重复的数
- Android -List<T>和ArrayList<T>(),发现你的真身
- 4.tomcat虚拟目录的配置
- 日记(周末)