java methodtype_java11教程--类MethodType用法

方法类型表示方法句柄接受和返回的参数和返回类型,或方法句柄调用者传递和期望的参数和返回类型。

方法类型必须在方法句柄及其所有调用方之间正确匹配,并且JVM的操作强制执行此匹配,特别是在调用MethodHandle.invokeExact和MethodHandle.invoke期间,以及执行invokedynamic指令期间。

该结构是返回类型,伴随有任意数量的参数类型。 类型(原语, void和引用)由类对象表示。 (为了便于说明,我们将void视为一种类型。实际上,它表示没有返回类型。)

MethodType所有实例都是不可变的。 如果它们相等,则两个实例完全可互换。 平等取决于返回和参数类型的成对对应,而不是其他任何东西。

此类型只能通过工厂方法创建。 尽管不保证缓存,但所有工厂方法都可以缓存值。 一些工厂方法是静态的,而其他工厂方法是修改前体方法类型的虚拟方法,例如,通过改变所选参数。

对参数类型组进行操作的工厂方法系统地以两个版本呈现,因此Java数组和Java列表都可用于处理参数类型组。 查询方法parameterArray和parameterList还提供了数组和列表之间的选择。

MethodType对象有时从字节码指令(例如invokedynamic ,特别是从与类文件的常量池中的指令关联的类型描述符字符串派生。

与类和字符串一样,方法类型也可以直接在类文件的常量池中表示为常量。 一种方法类型可以由一个装载ldc指令,它是指适当CONSTANT_MethodType常量存储库项。 该条目引用描述符字符串的CONSTANT_Utf8拼写。 (有关方法类型常量的完整详细信息,请参阅Java虚拟机规范的4.4.8和5.4.3.5节。)

当JVM从描述符字符串实现MethodType ,描述符中指定的所有类都必须是可访问的,并且将被加载。 (但是不需要初始化类,如CONSTANT_Class的情况。)此加载可能在首次派生MethodType对象之前的任何时间发生。

查找或创建具有其他参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

查找或创建具有单个不同参数类型的方法类型。

查找或创建具有不同返回类型的方法类型。

查找或创建省略了某些参数类型的方法类型。

将指定对象与此类型进行比较以获得相等性。

删除所有引用类型到

Object 。

在给定字节码描述符的拼写的情况下,查找或创建方法类型的实例。

将所有类型(包括引用和基元)转换为

Object 。

查找或创建其组件均为

Object的方法类型。

查找或创建一个方法类型,其组件为

Object并带有可选的尾随

Object[]数组。

返回此方法类型的哈希码值。

报告此类型是否包含基元参数或返回值。

报告此类型是否包含包装器参数或返回值。

查找或创建具有其他参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

返回此方法类型的最后一个参数类型。

查找或创建具有给定组件的方法类型。

查找或创建具有给定组件的方法类型。

查找或创建给定方法类型的实例。

查找或创建具有给定组件的方法类型。

查找或创建具有给定组件的方法类型。

查找或创建具有给定组件的方法类型。

将参数类型表示为数组(便捷方法)。

返回此方法类型中的参数类型数。

将参数类型显示为列表(便捷方法)。

返回此方法类型中指定索引处的参数类型。

返回此方法类型的返回类型。

生成方法类型的字节码描述符表示。

返回方法类型的字符串表示形式,格式为

"(PT0,PT1...)RT" 。

将所有包装器类型转换为其对应的基本类型。

将所有基元类型转换为其对应的包装类型。

查找或创建给定方法类型的实例。

查找或创建具有给定组件的方法类型。

查找或创建具有给定组件的方法类型。

前导参数类型前置于剩余的数组。

查找或创建具有给定组件的方法类型。

结果方法没有参数类型。

查找或创建具有给定组件的方法类型。

生成的方法具有单个给定的参数类型。

查找或创建具有给定组件的方法类型。

生成的方法具有与ptypes相同的参数类型,以及指定的返回类型。

查找或创建一个方法类型,其组件为Object并带有可选的尾随Object[]数组。

除最终数组参数(如果有)外,所有参数和返回类型将为Object ,即Object[] 。

查找或创建其组件均为Object的方法类型。

所有参数和返回类型都是Object。

查找或创建具有单个不同参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

查找或创建省略了某些参数类型的方法类型。

查找或创建具有不同返回类型的方法类型。

报告此类型是否包含基元参数或返回值。

返回类型void计为基元。

报告此类型是否包含包装器参数或返回值。

包装器是包含原始值的类型,例如Integer 。

如果引用类型为返回类型,则引用类型java.lang.Void计为包装器。

删除所有引用类型到Object 。

所有原始类型(包括void )将保持不变。

将所有类型(包括引用和基元)转换为Object 。

表达type.wrap().erase()产生相同的值type.generic() 。

将所有基元类型转换为其对应的包装类型。

所有引用类型(包括包装类型)将保持不变。

A void返回类型已更改为类型java.lang.Void 。

表达type.wrap().erase()产生相同的值type.generic() 。

将所有包装器类型转换为其对应的基本类型。

所有原始类型(包括void )将保持不变。

返回类型java.lang.Void更改为void 。

返回此方法类型中指定索引处的参数类型。

返回此方法类型中的参数类型数。

返回此方法类型的返回类型。

将参数类型显示为列表(便捷方法)。

该列表将是不可变的。

返回此方法类型的最后一个参数类型。

如果此类型没有参数,则返回void.class值void.class 。

将参数类型表示为数组(便捷方法)。

对数组的更改不会导致对类型的更改。

将指定对象与此类型进行比较以获得相等性。

也就是说,当且仅当指定的对象也是具有完全相同的参数和返回类型的方法类型时,它才返回true 。

返回此方法类型的哈希码值。

它被定义为与List的哈希码相同,其元素是返回类型,后跟参数类型。

返回方法类型的字符串表示形式,格式为"(PT0,PT1...)RT" 。

方法类型的字符串表示形式是括号括起来的逗号分隔的类型名称列表,紧接着是返回类型。

在给定字节码描述符的拼写的情况下,查找或创建方法类型的实例。

嵌入在描述符字符串中的任何类或接口名称将通过在给定加载器上调用ClassLoader.loadClass(java.lang.String)来解析(或者如果它是null,则在系统类加载器上)。

请注意,可能会遇到无法通过此方法构造的方法类型,因为它们的组件类型不能从公共类加载器中访问。

包含此方法的目的是为了必须生成处理方法句柄和invokedynamic字节码的应用程序。

生成方法类型的字节码描述符表示。

当在描述符字符串中查看时,两个不同的类共享一个共同的名称但具有不同的类加载器将显得相同。

包含此方法的目的是为了必须生成处理方法句柄的字节码和invokedynamic的应用程序。

变量和类型

方法

描述

类>... ptypesToInsert)

查找或创建具有其他参数类型的方法类型。

查找或创建具有其他参数类型的方法类型。

类> nptype)

查找或创建具有单个不同参数类型的方法类型。

查找或创建具有不同返回类型的方法类型。

查找或创建省略了某些参数类型的方法类型。

boolean

将指定对象与此类型进行比较以获得相等性。

删除所有引用类型到

Object 。

在给定字节码描述符的拼写的情况下,查找或创建方法类型的实例。

将所有类型(包括引用和基元)转换为

Object 。

查找或创建其组件均为

Object的方法类型。

查找或创建一个方法类型,其组件为

Object并带有可选的尾随

Object[]数组。

int

返回此方法类型的哈希码值。

boolean

报告此类型是否包含基元参数或返回值。

boolean

报告此类型是否包含包装器参数或返回值。

类>... ptypesToInsert)

查找或创建具有其他参数类型的方法类型。

List> ptypesToInsert)

查找或创建具有其他参数类型的方法类型。

类>

返回此方法类型的最后一个参数类型。

类> rtype)

查找或创建具有给定组件的方法类型。

类> rtype, 类> ptype0)

查找或创建具有给定组件的方法类型。

类> rtype, 类>[] ptypes)

查找或创建给定方法类型的实例。

类> rtype, 类> ptype0, 类>... ptypes)

查找或创建具有给定组件的方法类型。

查找或创建具有给定组件的方法类型。

类> rtype, List> ptypes)

查找或创建具有给定组件的方法类型。

类>[]

将参数类型表示为数组(便捷方法)。

int

返回此方法类型中的参数类型数。

List>

将参数类型显示为列表(便捷方法)。

类>

返回此方法类型中指定索引处的参数类型。

类>

返回此方法类型的返回类型。

返回方法类型的字符串表示形式,格式为

"(PT0,PT1...)RT" 。

将所有包装器类型转换为其对应的基本类型。

将所有基元类型转换为其对应的包装类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值