java.lang.Object
java.lang.runtime.ObjectMethods
用于核心方法的状态驱动实现的引导方法,包括
Object.equals(Object) 、 Object.hashCode() 和 Object.toString() 。例如,Java 编译器实现可以使用这些方法来实现记录类的Object 方法的主体。
- 自从:
- 16
-
方法总结
修饰符和类型方法描述static Objectbootstrap(MethodHandles.Lookup lookup, String methodName, TypeDescriptor type, Class<?> recordClass, String names, MethodHandle... getters) 用于生成Object.equals(Object)、Object.hashCode()和Object.toString()方法的引导方法,基于组件名称和访问器方法的描述,用于invokedynamic调用站点或动态常量池条目。
-
方法详情
-
bootstrap
public static Object bootstrap(MethodHandles.Lookup lookup, String methodName, TypeDescriptor type, Class <?> recordClass, String names, MethodHandle ... getters) throws Throwable 用于生成Object.equals(Object)、Object.hashCode()和Object.toString()方法的引导方法,基于组件名称和访问器方法的描述,用于invokedynamic调用站点或动态常量池条目。有关生成方法的语义的更多详细信息,请参阅Record.equals(Object)、Record.hashCode()和Record.toString()的规范。- 参数:
lookup- 每个引导程序方法都应有一个lookup,它通常表示具有调用者可访问权限的查找上下文。这是因为invokedynamic调用点总是提供一个lookup给相应的bootstrap方法,但是这个方法只是忽略了lookup参数methodName- 要生成的方法的名称,它必须是"equals"、"hashCode"或"toString"之一type- 一个MethodType对应于方法的描述符类型,它必须对应于相应的Object方法的描述符,如果链接一个invokedynamic调用站点,或者常量MethodHandle.class,如果链接一个动态常量recordClass- 托管记录组件的记录类names- 组件名称列表,连接成由“;”分隔的字符串,如果没有组件,则为空字符串。如果methodName参数为"equals"或"hashCode",则忽略此参数getters- 组件访问器方法的方法句柄- 返回:
- 如果由 indy 调用,则为调用站点;如果由 condy 调用,则为方法句柄
- 抛出:
IllegalArgumentException- 如果引导程序参数无效或不一致NullPointerException- 如果任何参数是null或者如果getters数组中的任何元素是nullThrowable- 如果在调用站点构造期间抛出任何异常
-