首页 > 代码库 > 运行时类型识别RTTI
运行时类型识别RTTI
1.RTTI的工作原理
例1. 用Class加载对象示例。
package RTTI;public class Candy { static{ System.out.println("Loading Candy in static block."); } public static void main(String[] args) { System.out.println("Loading Candy in main method."); }}
package RTTI;public class loadClass { public static void main(String[] args) { System.out.println("Before loading Candy."); try { Class.forName("Candy"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
2. 使用getClass()方法获取类信息
例2. getClass()方法使用示例。
package RTTI;public class Shape { void showMsg(){ System.out.println("This is Shape class."); }}
package RTTI;public class Circle extends Shape { void showMsg(){ System.out.println("This is Circle class."); }}
package RTTI;public class getClassName { public static void showName(Shape shape){ Class c1 = shape.getClass(); System.out.println(c1.getName()); if(c1.getName().equals("RTTI.Shape")) System.out.println("This is a shape object."); else if(c1.getName().equals("RTTI.Circle")) System.out.println("This is a circle object."); } public static void main(String[] args) { showName(new Circle()); showName(new Shape()); }}
程序的输出结果为:
RTTI.CircleThis is a circle object.RTTI.ShapeThis is a shape object.
3. 使用类标记
java提供了一种简便生成Class对象的方法:类标记。如果T是任意的java类型,那么,T.class就代表匹配的类对象。例如:
Class c1 = int.class;Class c2 = double[].class;Class c3 = Shape.class;
例3. 类标记使用示例
package RTTI;public class getClassName { public static void showName(Shape shape){ Class c1 = shape.getClass(); System.out.println(c1.getName());// if(c1.getName().equals("RTTI.Shape")) if(c1==Shape.class) System.out.println("This is a shape object.");// else if(c1.getName().equals("RTTI.Circle")) else if(c1==Circle.class) System.out.println("This is a circle object."); } public static void main(String[] args) { showName(new Circle()); showName(new Shape()); }}
4. 使用关键字instanceof判断所属类
java提供了一个关键字instanceof,用于帮助程序员判断一个对象真正所属的类。它是一个二元运算符,一般形式如下:
objectName instanceof className
计算结果为true或false。
例4. 使用instanceof判断所属类。
package RTTI;public class getClassName { public static void showName(Shape shape){ Class c1 = shape.getClass(); System.out.println(c1.getName());// if(c1.getName().equals("RTTI.Shape"))// if(c1==Shape.class) if(shape instanceof Circle) System.out.println("This is a circle object.");// else if(c1.getName().equals("RTTI.Circle"))// else if(c1==Circle.class) else if(shape instanceof Shape) System.out.println("This is a shape object."); } public static void main(String[] args) { showName(new Circle()); showName(new Shape()); }}
运行时类型识别RTTI
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。