java.lang.reflect和java.lang.invoke之间的区别是什么?
我知道我们俩都可以做反思,但我不知道差异
在我看来,反映允许收集所有方法,字段等,并且调用可以调用没有对象的方法
答案 0 :(得分:0)
reflect
是一个较旧的库,invoke
通过MethodHandles工作。
注意:尽管有名称,但MethodHandle可以包装构造函数或字段。
在Java 9中,会有VarHandles,尽管名称不是对变量的限制,但也可以调用代码。
答案 1 :(得分:0)
我建议the documentation。引用第一句话:
另一方面,java.lang.reflect是内省/反思。java.lang.invoke包中包含Java核心类库和虚拟机直接提供的动态语言支持。
答案 2 :(得分:0)
阅读java文档链接可以帮助您清楚地理解差异。
提供用于获取有关类和对象的反射信息的类和接口。
Reflection允许以编程方式访问有关已加载类的字段,方法和构造函数的信息,以及使用反射字段,方法和构造函数在安全限制内对其基础对应项进行操作。
java.lang.invoke包中包含Java核心类库和虚拟机直接提供的动态语言支持。
如Java虚拟机规范中所述,此程序包中的某些类型与虚拟机中的动态语言支持有特殊关系:
类MethodHandle
包含签名多态方法,无论其类型描述符如何,都可以链接。通常,方法链接需要完全匹配类型描述符。
JVM字节码格式支持类MethodHandle
和MethodType
的直接常量。