[英]Difference between RTTI and reflection in Java
我的问题是在运行时如何加载类信息?
当有人调用instanceof
是考虑RTTI还是反思? 还是取决于实际情况?
术语“ RTTI ”是一个特定于C ++的术语,指的是核心语言的功能,它允许程序在运行时确定各种对象的动态类型。 它通常引用dynamic_cast
或typeid
运算符,以及由typeid
生成的关联std::type_info
对象。
另一方面,术语反射是跨编程语言使用的通用术语,指的是程序在运行时检查和修改其对象,类型等的能力。
我听过应用于instanceof
的术语是类型内省,而instanceof
有时被称为对象内省 ,因为允许程序查看运行类型以确定要采取的操作过程。 我认为这是一个比反射更弱的术语,因为它不允许对对象的字段或方法进行详细的内省,但我认为在操作中使用instanceof
运算符反射在技术上并不正确。
至于你的另一个问题 - 如何在运行时加载类信息? - 这完全取决于JVM的实现。 ClassLoader
类型最终负责将类加载到系统中,但JVM可以解释它想要的。 我曾经用JavaScript构建了一个原型JVM,并且在内部所有的反射调用都只查询了我用来表示类,字段和方法的底层JS数据结构。 我认为HotSpot JVM做了一些完全不同的事情,但它几乎是实现定义的。
希望这可以帮助!
简而言之,RTTI和反射之间的真正区别在于,使用RTTI,编译器会在编译时打开并检查.class文件。 使用反射,.class文件在编译时不可用; 它由运行时环境打开并检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.