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