java - Java中RTTI和反射的区别

标签 java reflection terminology rtti instanceof

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

当有人调用 instanceof 时,这算是 RTTI 还是反射?还是视实际情况而定?

最佳答案

术语“RTTI”是一个特定于 C++ 的术语,指的是允许程序在运行时确定各种对象的动态类型的核心语言的功能。它通常是指 dynamic_casttypeid 运算符,以及由 typeid 生成的相关联的 std::type_info 对象.

另一方面,术语反射是跨编程语言使用的通用术语,指的是程序在运行时检查和修改其对象、类型等的能力。

我听说应用于 instanceof 的术语是 type introspection instanceof 有时被称为对象内省(introspection),因为允许程序查看正在运行的类型以确定要采取的操作过程。我认为这是一个比反射更弱的术语,因为它不允许对对象的字段或方法进行详细的内省(introspection),但我认为调用 instanceof< 的使用在技术上是不正确的 运算符反射。

关于您的另一个问题 - 类信息如何在运行时加载? - 这真的取决于 JVM 实现。 ClassLoader 类型最终负责将类加载到系统中,但 JVM 可以根据需要对其进行解释。我曾经用 JavaScript 构建了一个 JVM 原型(prototype),在内部所有反射调用只是查询我已经准备好的底层 JS 数据结构来表示类、字段和方法。我想 HotSpot JVM 会做一些完全不同的事情,但它几乎是实现定义的。

希望这对您有所帮助!

关于java - Java中RTTI和反射的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16553836/

相关文章:

java - 在menu.xml中使用actionLayout时android中的NullPointerException

java - 使用 RecyclerView 实现 Admob Native Advanced 但无法获取确切的 View 类型

reflection - 为什么在 Go 中获取函数名时会有 "-fm"后缀?

c# - 有没有办法以编程方式获取任意 MemberInfo 的源文件和行号?

ruby - 为什么 Method#arity 被称为 arity?

language-agnostic - 同一个 Action 的 CS "big word"术语是什么,总是具有相同的效果

java - Spring RestTemplate 接收 sun.security.validator.ValidatorException : PKIX path building failed:

java - GWT:如何从 Activity 启动方法中转到新位置?

C#通过反射设置对象DateTime属性值

algorithm - 由 'smart lines' 链接的盒子 - 这叫什么?怎么样?