更高级的编程语言,提供反射、解释机制,获取对象类型非常方便,因为运行时保存有对象的全部信息,也包括类型,而对于编译型语言而言,变量类型要靠编译期或构造/依赖类型某个存储类型的结构。
不同语言的反射
- C 语言不支持反射。
- ObjC 运行时库支持反射。
- C++ typeid编译器编译时可以确定某些无多态的变量对象类型,无需额外结构辅助。对于有多态行为的类对象,编译器利用vtable内指向对应类型的type_info, 运行期可通过vtable获取真实的类型。
- Kotlin 用is或!is, as或as? 判断变量类型或强制转换成特定类型。
