繁体   English   中英

Java中RTTI与反射的区别

[英]Difference between RTTI and reflection in Java

我的问题是在运行时如何加载类信息?

当有人调用instanceof是考虑RTTI还是反思? 还是取决于实际情况?

术语“ RTTI ”是一个特定于C ++的术语,指的是核心语言的功能,它允许程序在运行时确定各种对象的动态类型。 它通常引用dynamic_casttypeid运算符,以及由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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM