- java.lang.Object
-
- java.lang.invoke.ConstantBootstraps
-
public final class ConstantBootstraps extends Object
动态计算常量的Bootstrap方法。此类中的自举方法将抛出
NullPointerException
对任何参考参数为null
,除非参数被指定为未使用的或指定接受null
值。- 从以下版本开始:
- 11
-
-
构造方法摘要
构造方法 构造器 描述 ConstantBootstraps()
-
方法摘要
所有方法 静态方法 具体的方法 变量和类型 方法 描述 static VarHandle
arrayVarHandle(MethodHandles.Lookup lookup, String name, 类<VarHandle> type, 类<?> arrayClass)
查找数组类型的VarHandle
。static <E extends Enum<E>>
EenumConstant(MethodHandles.Lookup lookup, String name, 类<E> type)
返回由type
指定的类型的枚举
常量,其名称由name
指定。static VarHandle
fieldVarHandle(MethodHandles.Lookup lookup, String name, 类<VarHandle> type, 类<?> declaringClass, 类<?> fieldType)
查找实例字段的VarHandle
。static Object
getStaticFinal(MethodHandles.Lookup lookup, String name, 类<?> type)
返回类中声明的静态final字段的值,该字段与字段的类型相同(或者,对于原始值字段,在包装类中声明。)static Object
getStaticFinal(MethodHandles.Lookup lookup, String name, 类<?> type, 类<?> declaringClass)
返回静态final字段的值。static Object
invoke(MethodHandles.Lookup lookup, String name, 类<?> type, MethodHandle handle, Object... args)
返回使用提供的参数调用方法句柄的结果。static Object
nullConstant(MethodHandles.Lookup lookup, String name, 类<?> type)
返回由type
指定的引用类型的null
对象引用。static 类<?>
primitiveClass(MethodHandles.Lookup lookup, String name, 类<?> type)
返回原始类型的类
镜像,其类型描述符由name
指定。static VarHandle
staticFieldVarHandle(MethodHandles.Lookup lookup, String name, 类<VarHandle> type, 类<?> declaringClass, 类<?> fieldType)
找到静态字段的VarHandle
。
-
-
-
方法详细信息
-
nullConstant
public static Object nullConstant(MethodHandles.Lookup lookup, String name, 类<?> type)
返回由type
指定的引用类型的null
对象引用。- 参数
-
lookup
- 未使用 -
name
- 未使用 -
type
- 参考类型 - 结果
-
一个
null
值 - 异常
-
IllegalArgumentException
- 如果type
不是引用类型
-
primitiveClass
public static 类<?> primitiveClass(MethodHandles.Lookup lookup, String name, 类<?> type)
返回原始类型的类
镜像,其类型描述符由name
指定。- 参数
-
lookup
- 未使用 -
name
- 所需基元类型的描述符(JVMS 4.3) -
type
- 所需的结果类型(必须是Class.class
) - 结果
-
类
镜像 - 异常
-
IllegalArgumentException
- 如果名称不是基元类型的描述符或类型不是Class.class
-
enumConstant
public static <E extends Enum<E>> E enumConstant(MethodHandles.Lookup lookup, String name, 类<E> type)
返回由type
指定的类型的枚举
常量,其名称由name
指定。- 参数类型
-
E
- 要为其返回常量值的枚举类型 - 参数
-
lookup
- 描述执行操作的类的查找上下文(通常由JVM堆叠) -
name
- 要返回的常量的名称,该名称必须与指定类型中的枚举常量完全匹配。 -
type
- 描述要为其返回常量的枚举类型的类
对象 - 结果
- 具有指定名称的指定枚举类型的枚举常量
- 异常
-
IllegalAccessError
- 如果执行操作的类无法访问声明类或字段 -
IllegalArgumentException
- 如果指定的枚举类型没有具有指定名称的常量,或者指定的类对象不表示枚举类型 - 另请参见:
-
Enum.valueOf(Class, String)
-
getStaticFinal
public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, 类<?> type, 类<?> declaringClass)
返回静态final字段的值。- 参数
-
lookup
- 描述执行操作的类的查找上下文(通常由JVM堆叠) -
name
- 字段的名称 -
type
- 字段的类型 -
declaringClass
- 声明字段的类 - 结果
- 该领域的价值
- 异常
-
IllegalAccessError
- 如果执行操作的类无法访问声明类或字段 -
NoSuchFieldError
- 如果指定的字段不存在 -
IncompatibleClassChangeError
- 如果指定的字段不是final
-
getStaticFinal
public static Object getStaticFinal(MethodHandles.Lookup lookup, String name, 类<?> type)
返回在类中声明的静态final字段的值,该字段与字段的类型相同(或者,对于原始值字段,在包装类中声明。)这是getStaticFinal(MethodHandles.Lookup, String, Class, Class)
的简化形式,用于类声明的情况区分不变的自身实例。- 参数
-
lookup
- 描述执行操作的类的查找上下文(通常由JVM堆叠) -
name
- 字段的名称 -
type
- 字段的类型 - 结果
- 该领域的价值
- 异常
-
IllegalAccessError
- 如果执行操作的类无法访问声明类或字段 -
NoSuchFieldError
- 如果指定的字段不存在 -
IncompatibleClassChangeError
- 如果指定的字段不是final
- 另请参见:
-
getStaticFinal(MethodHandles.Lookup, String, Class, Class)
-
invoke
public static Object invoke(MethodHandles.Lookup lookup, String name, 类<?> type, MethodHandle handle, Object... args) throws Throwable
返回使用提供的参数调用方法句柄的结果。此方法的行为就好像要调用的方法句柄是通过调整给定方法句柄(通过
MethodHandle.asType(java.lang.invoke.MethodType)
)将返回类型调整为所需类型的结果。- 参数
-
lookup
- 未使用 -
name
- 未使用 -
type
- 要返回的值的所需类型,该值必须与方法句柄的返回类型兼容 -
handle
- 要调用的方法句柄 -
args
- 传递给方法句柄的参数,就像使用MethodHandle.invokeWithArguments(java.lang.Object...)
一样 。 每个参数可能是null
。 - 结果
- 调用方法句柄的结果
- 异常
-
WrongMethodTypeException
- 如果无法调整句柄的方法类型以获取给定数量的参数,或者句柄的返回类型无法调整为所需类型 -
ClassCastException
- 如果通过引用强制转换无法转换通过调用句柄生成的参数或结果 -
Throwable
- 方法句柄调用抛出的任何内容
-
fieldVarHandle
public static VarHandle fieldVarHandle(MethodHandles.Lookup lookup, String name, 类<VarHandle> type, 类<?> declaringClass, 类<?> fieldType)
查找实例字段的VarHandle
。- 参数
-
lookup
- 描述执行操作的类的查找上下文(通常由JVM堆叠) -
name
- 字段的名称 -
type
- 所需的结果类型(必须是Class<VarHandle>
) -
declaringClass
- 声明字段的类 -
fieldType
- 字段的类型 - 结果
-
VarHandle
- 异常
-
IllegalAccessError
- 如果执行操作的类无法访问声明类或字段 -
NoSuchFieldError
- 如果指定的字段不存在 -
IllegalArgumentException
- 如果类型不是VarHandle
-
staticFieldVarHandle
public static VarHandle staticFieldVarHandle(MethodHandles.Lookup lookup, String name, 类<VarHandle> type, 类<?> declaringClass, 类<?> fieldType)
找到静态字段的VarHandle
。- 参数
-
lookup
- 描述执行操作的类的查找上下文(通常由JVM堆叠) -
name
- 字段的名称 -
type
- 所需的结果类型(必须是Class<VarHandle>
) -
declaringClass
- 声明字段的类 -
fieldType
- 字段的类型 - 结果
-
VarHandle
- 异常
-
IllegalAccessError
- 如果执行操作的类无法访问声明类或字段 -
NoSuchFieldError
- 如果指定的字段不存在 -
IllegalArgumentException
- 如果类型不是VarHandle
-
arrayVarHandle
public static VarHandle arrayVarHandle(MethodHandles.Lookup lookup, String name, 类<VarHandle> type, 类<?> arrayClass)
查找阵列类型的VarHandle
。- 参数
-
lookup
- 描述执行操作的类的查找上下文(通常由JVM堆叠) -
name
- 未使用 -
type
- 必需的结果类型(必须是Class<VarHandle>
) -
arrayClass
- 数组的类型 - 结果
-
VarHandle
- 异常
-
IllegalAccessError
- 如果执行操作的类无法访问该数组的组件类型 -
IllegalArgumentException
- 如果类型不是VarHandle
-
-