gra*_*n33 6 java reflection language-features dynamic-programming
据我所知和理解,
反射是在运行时创建/修改源代码的能力.
来自维基百科:
动态语言是我们可以在运行时评估(直接从字符串求值)的语言.
来自维基百科:"程序的扩展,通过添加新代码,通过扩展对象和定义,或通过修改类型系统"
好的,现在,我的问题是:静态语言(没有eval能力)如何能有反射(例如Java)?(新的源代码不评估?:/)
提前致谢!
我认为维基百科的解释措辞不太好。
反射(或内省)不是关于在运行时创建代码,而是关于代码在运行时反思自身的能力(并基于此修改其行为)。示例包括获取有关对象类型的信息(如 C++ 中的 RTTI)或获取与对象关联的元数据(如 Java 中的注释)。
运行时代码生成与一流性的关系比与反射的关系更大,所以我认为当前的维基百科文章有点误导。
更新
换句话说,回答这个问题:
好吧,现在,我的问题是,静态语言(没有eval能力)如何才能有反射(例如Java)?
……那就是反思不依赖于水平能力。这是两个独立的语言功能。
而且,正如 Giulio Franco 在评论中指出的那样 - Java 能够进行运行时代码生成\操作(例如,请参见CGLIB )。