java.lang.reflect和java.lang.invoke之间的区别是什么?

时间:2016-01-10 19:28:44

标签: java reflection invoke

java.lang.reflect和java.lang.invoke之间的区别是什么?

我知道我们俩都可以做反思,但我不知道差异

在我看来,反映允许收集所有方法,字段等,并且调用可以调用没有对象的方法

3 个答案:

答案 0 :(得分:0)

reflect是一个较旧的库,invoke通过MethodHandles工作。

注意:尽管有名称,但MethodHandle可以包装构造函数或字段。

在Java 9中,会有VarHandles,尽管名称不是对变量的限制,但也可以调用代码。

答案 1 :(得分:0)

我建议the documentation。引用第一句话:

  

java.lang.invoke包中包含Java核心类库和虚拟机直接提供的动态语言支持。

另一方面,java.lang.reflect是内省/反思。

答案 2 :(得分:0)

阅读java文档链接可以帮助您清楚地理解差异。

java.lang.reflect

  

提供用于获取有关类和对象的反射信息的类和接口。

     

Reflection允许以编程方式访问有关已加载类的字段,方法和构造函数的信息,以及使用反射字段,方法和构造函数在安全限制内对其基础对应项进行操作。

java.lang.invoke

  

java.lang.invoke包中包含Java核心类库和虚拟机直接提供的动态语言支持。

     

如Java虚拟机规范中所述,此程序包中的某些类型与虚拟机中的动态语言支持有特殊关系:

MethodHandle包含签名多态方法,无论其类型描述符如何,都可以链接。通常,方法链接需要完全匹配类型描述符。

JVM字节码格式支持类MethodHandleMethodType的直接常量。