Module java.base

Class ConstantBootstraps


  • public final class ConstantBootstraps
    extends Object
    Bootstrap methods for dynamically-computed constants.

    The bootstrap methods in this class will throw a NullPointerException for any reference argument that is null, unless the argument is specified to be unused or specified to accept a null value.

    Since:
    11
    • Constructor Detail

      • ConstantBootstraps

        public ConstantBootstraps()
    • Method Detail

      • nullConstant

        public static Object nullConstant​(MethodHandles.Lookup lookup,
                                          String name,
                                          Class<?> type)
        Returns a null object reference for the reference type specified by type.
        Parameters:
        lookup - unused
        name - unused
        type - a reference type
        Returns:
        a null value
        Throws:
        IllegalArgumentException - if type is not a reference type
      • primitiveClass

        public static Class<?> primitiveClass​(MethodHandles.Lookup lookup,
                                              String name,
                                              Class<?> type)
        Returns a Class mirror for the primitive type whose type descriptor is specified by name.
        Parameters:
        lookup - unused
        name - the descriptor (JVMS 4.3) of the desired primitive type
        type - the required result type (must be Class.class)
        Returns:
        the Class mirror
        Throws:
        IllegalArgumentException - if the name is not a descriptor for a primitive type or the type is not Class.class
      • enumConstant

        public static <E extends Enum<E>> E enumConstant​(MethodHandles.Lookup lookup,
                                                         String name,
                                                         Class<E> type)
        Returns an enum constant of the type specified by type with the name specified by name.
        Type Parameters:
        E - The enum type for which a constant value is to be returned
        Parameters:
        lookup - the lookup context describing the class performing the operation (normally stacked by the JVM)
        type - the Class object describing the enum type for which a constant is to be returned
        name - the name of the constant to return, which must exactly match an enum constant in the specified type.
        Returns:
        the enum constant of the specified enum type with the specified name
        Throws:
        IllegalAccessError - if the declaring class or the field is not accessible to the class performing the operation
        IllegalArgumentException - if the specified enum type has no constant with the specified name, or the specified class object does not represent an enum type
        See Also:
        Enum.valueOf(Class, String)
      • getStaticFinal

        public static Object getStaticFinal​(MethodHandles.Lookup lookup,
                                            String name,
                                            Class<?> type,
                                            Class<?> declaringClass)
        Returns the value of a static final field.
        Parameters:
        lookup - the lookup context describing the class performing the operation (normally stacked by the JVM)
        name - the name of the field
        type - the type of the field
        declaringClass - the class in which the field is declared
        Returns:
        the value of the field
        Throws:
        IllegalAccessError - if the declaring class or the field is not accessible to the class performing the operation
        NoSuchFieldError - if the specified field does not exist
        IncompatibleClassChangeError - if the specified field is not final
      • invoke

        public static Object invoke​(MethodHandles.Lookup lookup,
                                    String name,
                                    Class<?> type,
                                    MethodHandle handle,
                                    Object... args)
                             throws Throwable
        Returns the result of invoking a method handle with the provided arguments.
        Parameters:
        lookup - the lookup context describing the class performing the operation (normally stacked by the JVM)
        name - unused
        type - the type of the value to be returned, which must be compatible with the return type of the method handle
        handle - the method handle to be invoked
        args - the arguments to pass to the method handle, as if with MethodHandle.invokeWithArguments(java.lang.Object...). Each argument may be null.
        Returns:
        the result of invoking the method handle
        Throws:
        WrongMethodTypeException - if the handle's return type cannot be adjusted to the desired type
        ClassCastException - if an argument cannot be converted by reference casting
        Throwable - anything thrown by the method handle invocation
      • fieldVarHandle

        public static VarHandle fieldVarHandle​(MethodHandles.Lookup lookup,
                                               String name,
                                               Class<VarHandle> type,
                                               Class<?> declaringClass,
                                               Class<?> fieldType)
        Finds a VarHandle for an instance field.
        Parameters:
        lookup - the lookup context describing the class performing the operation (normally stacked by the JVM)
        name - the name of the field
        type - the required result type (must be Class<VarHandle>)
        declaringClass - the class in which the field is declared
        fieldType - the type of the field
        Returns:
        the VarHandle
        Throws:
        IllegalAccessError - if the declaring class or the field is not accessible to the class performing the operation
        NoSuchFieldError - if the specified field does not exist
        IllegalArgumentException - if the type is not VarHandle
      • staticFieldVarHandle

        public static VarHandle staticFieldVarHandle​(MethodHandles.Lookup lookup,
                                                     String name,
                                                     Class<VarHandle> type,
                                                     Class<?> declaringClass,
                                                     Class<?> fieldType)
        Finds a VarHandle for a static field.
        Parameters:
        lookup - the lookup context describing the class performing the operation (normally stacked by the JVM)
        name - the name of the field
        type - the required result type (must be Class<VarHandle>)
        declaringClass - the class in which the field is declared
        fieldType - the type of the field
        Returns:
        the VarHandle
        Throws:
        IllegalAccessError - if the declaring class or the field is not accessible to the class performing the operation
        NoSuchFieldError - if the specified field does not exist
        IllegalArgumentException - if the type is not VarHandle
      • arrayVarHandle

        public static VarHandle arrayVarHandle​(MethodHandles.Lookup lookup,
                                               String name,
                                               Class<VarHandle> type,
                                               Class<?> arrayClass)
        Finds a VarHandle for an array type.
        Parameters:
        lookup - the lookup context describing the class performing the operation (normally stacked by the JVM)
        name - unused
        type - the required result type (must be Class<VarHandle>)
        arrayClass - the type of the array
        Returns:
        the VarHandle
        Throws:
        IllegalAccessError - if the component type of the array is not accessible to the class performing the operation
        IllegalArgumentException - if the type is not VarHandle