Module jdk.dynalink

Interface MissingMemberHandlerFactory

功能接口:
这是一个功能接口,因此可以用作lambda表达式或方法引用的赋值目标。

@FunctionalInterface public interface MissingMemberHandlerFactory
用于创建方法句柄的工厂,用于链接BeansLinker中缺失成员行为的方法句柄。当请求链接指定GET_*SET_* StandardOperation时,BeansLinker将这些方法句柄链接到受保护的调用中,当请求的成员(属性、方法或元素)缺失时,可以确定或可能缺失。它们将链接到具名和未命名操作。实现者必须确保返回的方法句柄的参数类型与链接请求中描述的调用点的参数类型匹配。返回类型可以不同,以允许DynamicLinkerFactory.setPrelinkTransformer(jdk.dynalink.linker.GuardedInvocationTransformer)进行延迟返回类型转换。如果默认行为足够,则允许为方法句柄返回null

默认缺失成员行为

BeansLinker配置为没有缺失成员处理程序工厂,或者工厂对于特定处理程序创建调用返回null时,将使用默认行为。默认行为是在链接时可以确定链接操作永远不会访问现有成员时,从BeansLinker.getGuardedInvocation(LinkRequest, LinkerServices)返回null。这使得DynamicLinker可以尝试下一个链接器(如果有的话),或者最终使用NoSuchDynamicMethodException失败链接请求。对于其他情况(通常是所有未命名成员操作以及大多数集合元素的命名操作),BeansLinker将生成一个条件链接,当在运行时使用与任何成员不匹配的名称调用时,将返回null用于getter,并在setter的情况下静默忽略传递的值。

实现抛出异常行为

请注意,如果对于缺失成员的操作的特定语言特定行为是抛出异常,则工厂应生成一个在调用时抛出异常的方法句柄,并且不能自身抛出异常,因为缺失成员的链接通常是有条件的。
参见:
  • Method Details

    • createMissingMemberHandler

      MethodHandle createMissingMemberHandler(LinkRequest linkRequest, LinkerServices linkerServices) throws Exception
      返回适用于为特定链接请求实现缺失成员行为的方法句柄。有关详细信息,请参阅类描述。
      参数:
      linkRequest - 当前链接请求
      linkerServices - 当前链接服务
      返回:
      如果由操作寻址的属性、元素或方法缺失,则可以调用的方法句柄。返回值可以为null。
      抛出:
      Exception - 如果由于任何原因操作失败。请查看类文档注释以了解实现抛出异常的缺失成员行为。