RTTI运行期类型识别

本文介绍了Java中的类型检查方法,包括Class对象的使用、强转、instanceof关键字的应用及其实例。同时深入探讨了反射机制的基本概念、应用场景,并通过具体示例展示了如何利用反射操作类的成员变量和方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当我们把一个对象装入容器之中其就会失去自己的类型,当取出来的在作为原来类型使用的时候需要强转,这就是一中运行期类别是别的表现。java中总共的表现有三种形式:强转,Class对象,和instanceof方法。

 

强转刚才已经说过。

Class对象

Class对象就是保持了类型信息的对象。当一个类加载之后就会产生一个Class对象,为了得到这个Class对象的引用我们可以有如下的方式:

  • Class.forName()方法。这种方式有个弊端,就是参数必须是全路径名的类名,这样就很容易出错,还必须做异常处理。
  • 类字面常量ClassA.class,int.class。

看一个例子,是用来数宠物的数目,我们能得到很多类型识别使用的方法。

在数的时候,会有如下的特征:

  • 可以使用A.class.isInstance(a)的方式,来表达a是ClassA是实例,另外还可以使用 a instanceof A来判断a是否是A类型但是使用instanceof判断的时候,就不能使用遍历的循环方式了。
  • 判断的时候会把子类的对象也认识是父类型的。

反射

我们使用Class的功能是,除了用于判断类型外,主要是为了得到类型中的属性和方法,以控制这些方法。

另外反射也是写框架所必备的技术,像struts等框架中大量的使用了这种技术。

反射中涉及的方法比较多,看例子:

能够判断是否是接口,能够得到父类,能够得到类型的属性,还能够引用类型的方法等等。

 

annotation 注释

在java1.5之后,加入了注释功能,是一种元数据的描述方式。主要起到修饰的作用。可以修饰方法,变量等等,本身加载程序上不会有作用,需要有配套的工具类来进行使用。比如现在最新的hibernate中就有对应的注释能够标注bean与数据库字段的对应关系,通过hibernate来使用这些注释。

 

在创建自己的注释之前,我们先看一下java的内建注释。

@deprecated。表示过时。
@override表示此方法覆盖了父类的方法,编译器应该通过这个注释判断是否有覆盖行为发生,没有给出编译提示。

当然还有很多其他的内容,这里只是给出了例子。

 

annotation本身是一种特殊的接口,我们可以创建自己的注释,看一个例子,我们来创建一个约束日期格式的注释,然后使用反射来提示这一点。

注意创建自己的注释的时候也可以用内建的注释进行修饰。代码中已经有说明。注释还有很多比较高级的使用,这里不进行详述,如果有机会讨论写一个自己的框架的话,在详细的讨论复杂的反射的使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值