java.lang.Object
java.lang.runtime.ObjectMethods
状态驱动实现核心方法的Bootstrap方法,包括
Object.equals(Object)
,Object.hashCode()
和Object.toString()
。例如,Java编译器实现可以使用这些方法来为记录类实现Object
方法的主体。
- 自 JDK 版本:
- 16
-
Method Summary
Modifier and TypeMethodDescriptionstatic Object
bootstrap
(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
- 如果在调用站点构造期间抛出任何异常
-