正在加载图片...
Chapter 10: Detecting Types Class常数不但能用于普通类,也可以用于接口,数组和 primitive类 型。此外,每种 primitive的 wrapper类还有一个标准的,名为TYPE 的数据成员。这个TYPE能返回“与这种 primitive相关联的 wrapper 类”的cass对象的 reference,就像这样: 等同于 boolean class Boolean TYPE char class Character TYPE byte class Byte TYPE short class ShortTYPE int class Integer TYPE long. class Long TYPE floatclass FloatTYPE double class Double TYPE void. class VoidTYPE 我喜欢尽量使用“, class”,因为这种写法能与普通类的保持一致。 转换之前先作检查 到目前为止,你看到的RTTI的形式有: 1.经典的类型转换;如“( Shape)”,这种转换要经过RTT的检查。要是 做了错误的转换,它就会抛出 Class CastException。 代表对象类型的 Class对象。你可以在运行的时候查询 Class对象,以 此来获取所需的信息。 在C++里,经典的“( Shape)”形式的转换并不动用RTTI。它只是简 单地告诉编译器把这个对象当作那个新的类型来用。但Java会作类型检 查,所以Java的类型转换常常被称作“类型安全的下传”。之所以要说 “下传”,是因为在继承关系图里,派生类一般会放在下面。如果把 Circle到 Shape的转换称作上传,那么 Shape到 Circle的转换就应 该叫下传了。不过你知道 Circle就是 Shape,而且编译器也不会阻止 去上传,但是你不一定知道 Shape是不是一个 Circle,所以如果不进 行明确的类型转换的话,编译器是不会让你把对象赋给派生类的 reference的。 Java里面还有第三种RTTI的形式。这就是 instanceof关键词,它会 告诉你对象是不是某个类的实例。它返回的是一个 boolean值,因此你 就可以用提问的形式来用了,就像这样: if(x instanceof Dog 第6页共17页 www.wgqqh.com/shhgs/tij.html emailshhgsasohu.comChapter 10: Detecting Types www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com 第 6 页 共 17 页 Class 常数不但能用于普通类,也可以用于接口,数组和 primitive 类 型。此外,每种 primitive 的 wrapper 类还有一个标准的,名为 TYPE 的数据成员。这个 TYPE 能返回“与这种 primitive 相关联的 wrapper 类”的 Class 对象的 reference,就像这样: ... 等同于... boolean.class Boolean.TYPE char.class Character.TYPE byte.class Byte.TYPE short.class Short.TYPE int.class Integer.TYPE long.class Long.TYPE float.class Float.TYPE double.class Double.TYPE void.class Void.TYPE 我喜欢尽量使用“.class” ,因为这种写法能与普通类的保持一致。 转换之前先作检查 到目前为止,你看到的 RTTI 的形式有: 1. 经典的类型转换;如“(Shape)”,这种转换要经过 RTTI 的检查。要是 做了错误的转换,它就会抛出 ClassCastException。 2. 代表对象类型的 Class 对象。你可以在运行的时候查询 Class 对象,以 此来获取所需的信息。 在 C++里,经典的“(Shape)”形式的转换并不动用 RTTI。它只是简 单地告诉编译器把这个对象当作那个新的类型来用。但 Java 会作类型检 查,所以 Java 的类型转换常常被称作“类型安全的下传”。之所以要说 “下传”,是因为在继承关系图里,派生类一般会放在下面。如果把 Circle 到 Shape 的转换称作上传,那么 Shape 到 Circle 的转换就应 该叫下传了。不过你知道 Circle 就是 Shape,而且编译器也不会阻止 去上传,但是你不一定知道 Shape 是不是一个 Circle,所以如果不进 行明确的类型转换的话,编译器是不会让你把对象赋给派生类的 reference 的。 Java 里面还有第三种 RTTI 的形式。这就是 instanceof 关键词,它会 告诉你对象是不是某个类的实例。它返回的是一个 boolean 值,因此你 就可以用提问的形式来用了,就像这样: if(x instanceof Dog)
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有