Lookup (Java SE 23 & JDK 23)
Description: declaration: module: jdk.dynalink, package: jdk.dynalink.linker.support, class: Lookup
Keywords: jdk.dynalink.linker.support.Lookup class

# Class Lookup

java.lang.Object
jdk.dynalink.linker.support.Lookup

public final class Lookup extends Object
A wrapper around `MethodHandles.Lookup` that masks checked exceptions. It is useful in those cases when you're looking up methods within your own codebase (therefore it is an error if they are not present).

Since:
  9

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `static final Lookup`
  `PUBLIC`
  A canonical Lookup object that wraps `MethodHandles.publicLookup()`.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `Lookup(MethodHandles.Lookup lookup)`
  Creates a new instance, bound to an instance of `MethodHandles.Lookup`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `MethodHandle`
  `findGetter(Class<?> refc, String name, Class<?> type)`
  Performs a `MethodHandles.Lookup.findGetter(Class, String, Class)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError` and `NoSuchFieldException` into a `NoSuchFieldError`.
  `static MethodHandle`
  `findOwnSpecial(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes)`
  Given a lookup, finds using `findSpecial(Class, String, MethodType)` a method on that lookup's class.
  `MethodHandle`
  `findOwnSpecial(String name, Class<?> rtype, Class<?>... ptypes)`
  Finds using `findSpecial(Class, String, MethodType)` a method on that lookup's class.
  `static MethodHandle`
  `findOwnStatic(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes)`
  Given a lookup, finds using `findStatic(Class, String, MethodType)` a method on that lookup's class.
  `MethodHandle`
  `findOwnStatic(String name, Class<?> rtype, Class<?>... ptypes)`
  Finds using `findStatic(Class, String, MethodType)` a method on that lookup's class.
  `MethodHandle`
  `findSpecial(Class<?> declaringClass, String name, MethodType type)`
  Performs a `MethodHandles.Lookup.findSpecial(Class, String, MethodType, Class)` on the underlying lookup.
  `MethodHandle`
  `findStatic(Class<?> declaringClass, String name, MethodType type)`
  Performs a `MethodHandles.Lookup.findStatic(Class, String, MethodType)` on the underlying lookup.
  `MethodHandle`
  `findVirtual(Class<?> declaringClass, String name, MethodType type)`
  Performs a `MethodHandles.Lookup.findVirtual(Class, String, MethodType)` on the underlying lookup.
  `static MethodHandle`
  `unreflect(MethodHandles.Lookup lookup, Method m)`
  Performs a `MethodHandles.Lookup.unreflect(Method)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
  `MethodHandle`
  `unreflect(Method m)`
  Performs a `MethodHandles.Lookup.unreflect(Method)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
  `static MethodHandle`
  `unreflectConstructor(MethodHandles.Lookup lookup, Constructor<?> c)`
  Performs a `MethodHandles.Lookup.unreflectConstructor(Constructor)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
  `MethodHandle`
  `unreflectConstructor(Constructor<?> c)`
  Performs a `MethodHandles.Lookup.unreflectConstructor(Constructor)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
  `MethodHandle`
  `unreflectGetter(Field f)`
  Performs a `MethodHandles.Lookup.unreflectGetter(Field)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
  `MethodHandle`
  `unreflectSetter(Field f)`
  Performs a `MethodHandles.Lookup.unreflectSetter(Field)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.

  ### Methods declared in class java.lang.Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- ## Field Details

  - ### PUBLIC

    public static final Lookup PUBLIC
    A canonical Lookup object that wraps `MethodHandles.publicLookup()`.

- ## Constructor Details

  - ### Lookup

    public Lookup(MethodHandles.Lookup lookup)
    Creates a new instance, bound to an instance of `MethodHandles.Lookup`.
    Parameters:
      `lookup` - the `MethodHandles.Lookup` it delegates to.

- ## Method Details

  - ### unreflect

    public MethodHandle unreflect(Method m)
    Performs a `MethodHandles.Lookup.unreflect(Method)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
    Parameters:
      `m` - the method to unreflect
    Returns:
      the unreflected method handle.
    Throws:
      `IllegalAccessError` - if the method is inaccessible.

  - ### unreflect

    public static MethodHandle unreflect(MethodHandles.Lookup lookup, Method m)
    Performs a `MethodHandles.Lookup.unreflect(Method)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
    Parameters:
      `lookup` - the lookup used to unreflect
      `m` - the method to unreflect
    Returns:
      the unreflected method handle.
    Throws:
      `IllegalAccessError` - if the method is inaccessible.

  - ### unreflectGetter

    public MethodHandle unreflectGetter(Field f)
    Performs a `MethodHandles.Lookup.unreflectGetter(Field)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
    Parameters:
      `f` - the field for which a getter is unreflected
    Returns:
      the unreflected field getter handle.
    Throws:
      `IllegalAccessError` - if the getter is inaccessible.

  - ### findGetter

    public MethodHandle findGetter(Class<?> refc, String name, Class<?> type)
    Performs a `MethodHandles.Lookup.findGetter(Class, String, Class)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError` and `NoSuchFieldException` into a `NoSuchFieldError`.
    Parameters:
      `refc` - the class declaring the field
      `name` - the name of the field
      `type` - the type of the field
    Returns:
      the unreflected field getter handle.
    Throws:
      `IllegalAccessError` - if the field is inaccessible.
      `NoSuchFieldError` - if the field does not exist.

  - ### unreflectSetter

    public MethodHandle unreflectSetter(Field f)
    Performs a `MethodHandles.Lookup.unreflectSetter(Field)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
    Parameters:
      `f` - the field for which a setter is unreflected
    Returns:
      the unreflected field setter handle.
    Throws:
      `IllegalAccessError` - if the field is inaccessible.
      `NoSuchFieldError` - if the field does not exist.

  - ### unreflectConstructor

    public MethodHandle unreflectConstructor(Constructor<?> c)
    Performs a `MethodHandles.Lookup.unreflectConstructor(Constructor)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
    Parameters:
      `c` - the constructor to unreflect
    Returns:
      the unreflected constructor handle.
    Throws:
      `IllegalAccessError` - if the constructor is inaccessible.

  - ### unreflectConstructor

    public static MethodHandle unreflectConstructor(MethodHandles.Lookup lookup, Constructor<?> c)
    Performs a `MethodHandles.Lookup.unreflectConstructor(Constructor)`, converting any encountered `IllegalAccessException` into an `IllegalAccessError`.
    Parameters:
      `lookup` - the lookup used to unreflect
      `c` - the constructor to unreflect
    Returns:
      the unreflected constructor handle.
    Throws:
      `IllegalAccessError` - if the constructor is inaccessible.

  - ### findSpecial

    public MethodHandle findSpecial(Class<?> declaringClass, String name, MethodType type)
    Performs a `MethodHandles.Lookup.findSpecial(Class, String, MethodType, Class)` on the underlying lookup. Converts any encountered `IllegalAccessException` into an `IllegalAccessError` and `NoSuchMethodException` into a `NoSuchMethodError`.
    Parameters:
      `declaringClass` - class declaring the method
      `name` - the name of the method
      `type` - the type of the method
    Returns:
      a method handle for the method
    Throws:
      `IllegalAccessError` - if the method is inaccessible.
      `NoSuchMethodError` - if the method does not exist.

  - ### findStatic

    public MethodHandle findStatic(Class<?> declaringClass, String name, MethodType type)
    Performs a `MethodHandles.Lookup.findStatic(Class, String, MethodType)` on the underlying lookup. Converts any encountered `IllegalAccessException` into an `IllegalAccessError` and `NoSuchMethodException` into a `NoSuchMethodError`.
    Parameters:
      `declaringClass` - class declaring the method
      `name` - the name of the method
      `type` - the type of the method
    Returns:
      a method handle for the method
    Throws:
      `IllegalAccessError` - if the method is inaccessible.
      `NoSuchMethodError` - if the method does not exist.

  - ### findVirtual

    public MethodHandle findVirtual(Class<?> declaringClass, String name, MethodType type)
    Performs a `MethodHandles.Lookup.findVirtual(Class, String, MethodType)` on the underlying lookup. Converts any encountered `IllegalAccessException` into an `IllegalAccessError` and `NoSuchMethodException` into a `NoSuchMethodError`.
    Parameters:
      `declaringClass` - class declaring the method
      `name` - the name of the method
      `type` - the type of the method
    Returns:
      a method handle for the method
    Throws:
      `IllegalAccessError` - if the method is inaccessible.
      `NoSuchMethodError` - if the method does not exist.

  - ### findOwnSpecial

    public static MethodHandle findOwnSpecial(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes)
    Given a lookup, finds using `findSpecial(Class, String, MethodType)` a method on that lookup's class. Useful in classes' code for convenient linking to their own privates.
    Parameters:
      `lookup` - the lookup for the class
      `name` - the name of the method
      `rtype` - the return type of the method
      `ptypes` - the parameter types of the method
    Returns:
      the method handle for the method

  - ### findOwnSpecial

    public MethodHandle findOwnSpecial(String name, Class<?> rtype, Class<?>... ptypes)
    Finds using `findSpecial(Class, String, MethodType)` a method on that lookup's class. Useful in classes' code for convenient linking to their own privates. It's also more convenient than `findSpecial` in that you can just list the parameter types, and don't have to specify lookup class.
    Parameters:
      `name` - the name of the method
      `rtype` - the return type of the method
      `ptypes` - the parameter types of the method
    Returns:
      the method handle for the method

  - ### findOwnStatic

    public static MethodHandle findOwnStatic(MethodHandles.Lookup lookup, String name, Class<?> rtype, Class<?>... ptypes)
    Given a lookup, finds using `findStatic(Class, String, MethodType)` a method on that lookup's class. Useful in classes' code for convenient linking to their own privates. It's easier to use than `findStatic` in that you can just list the parameter types, and don't have to specify lookup class.
    Parameters:
      `lookup` - the lookup for the class
      `name` - the name of the method
      `rtype` - the return type of the method
      `ptypes` - the parameter types of the method
    Returns:
      the method handle for the method

  - ### findOwnStatic

    public MethodHandle findOwnStatic(String name, Class<?> rtype, Class<?>... ptypes)
    Finds using `findStatic(Class, String, MethodType)` a method on that lookup's class. Useful in classes' code for convenient linking to their own privates. It's easier to use than `findStatic` in that you can just list the parameter types, and don't have to specify lookup class.
    Parameters:
      `name` - the name of the method
      `rtype` - the return type of the method
      `ptypes` - the parameter types of the method
    Returns:
      the method handle for the method