Module  jdk.dynalink
软件包  jdk.dynalink.beans

Class BeansLinker

  • All Implemented Interfaces:
    GuardingDynamicLinker


    public class BeansLinker
    extends Object
    implements GuardingDynamicLinker
    用于普通Java对象的链接器。 通常由DynamicLinkerFactory用作最终的回退链接器,因此有机会将调用链接到没有其他链接器识别的所有对象。 具体来说,此链接器将:

    为属性设置器,方法和构造函数自动执行重载方法分辨率 另外,手动重载方法选择通过调用站点指定包含显式签名的方法的名称来支持,例如, StandardOperation.GET.withNamespace(METHOD).named("parseInt(String,int)")您可以在这样的签名中使用非限定类名,而不管这些类的包,它们将匹配任何类具有相同的非限定名称。 您只需使用完全限定的类名,以防非合格类名称会导致选择模糊(这是非常罕见的)。 构造函数的重载分辨率不是自动的,因为没有逻辑的地方来附加该功能,但如果语言希望提供此功能,它可以使用getConstructorMethod(Class, String)作为一个有用的构建块。

    对方法和构造函数处理变量参数调用

    呼叫者敏感方法可以链接,只要它们是公共的,并且链接请求具有呼叫站点描述符,携带全强度的MethodHandles.Lookup对象,而不是削弱的查找或公共查找。

    处理缺失成员的行为可以通过传递一个定制MissingMemberHandlerFactoryconstructor

    该类还公开了各种用于发现类和类实例上的可用属性和方法名称的方法,以及使用getLinkerForClass(Class)方法访问每类链接器。

    • 构造方法详细信息

      • BeansLinker

        public BeansLinker​()
        创建一个新的bean连接器。 相当于BeansLinker(MissingMemberHandlerFactory)其中null作为缺少的成员处理程序工厂传递,导致链接和评估丢失成员的默认行为。
      • BeansLinker

        public BeansLinker​(MissingMemberHandlerFactory missingMemberHandlerFactory)
        使用指定的工厂创建一个新的bean连接器来创建缺少的成员处理程序。 如果默认行为足够,则通过的工厂可以为null。 详见MissingMemberHandlerFactory
        参数
        missingMemberHandlerFactory - 为缺少成员创建操作的工厂。
    • 方法详细信息

      • getLinkerForClass

        public TypeBasedGuardingDynamicLinker getLinkerForClass​(Class<?> clazz)
        返回特定单个类的bean连接器。 当您需要覆盖或扩展语言运行时链接器中某些类的链接行为时,但在某些情况下仍需要委派为默认行为,这是有用的。
        参数
        clazz - 班
        结果
        该类的bean链接器
      • isDynamicMethod

        public static boolean isDynamicMethod​(Object obj)
        如果对象是Java动态方法(例如,通过Java对象上的GET:METHOD操作获得的或StaticClass或通过getConstructorMethod(Class, String)获取的对象),则返回true。
        参数
        obj - 我们要测试作为Java动态方法的对象。
        结果
        如果是动态方法,则为true,否则为false。
      • isDynamicConstructor

        public static boolean isDynamicConstructor​(Object obj)
        如果对象是Java构造函数(通过 getConstructorMethod(Class, String)获得),则返回true。
        参数
        obj - 我们要测试作为Java构造函数的对象。
        结果
        如果是构造函数,则为true,否则为false。
      • getConstructorMethod

        public static Object getConstructorMethod​(Class<?> clazz,
                                                  String signature)
        返回给定类的构造函数的动态方法和给定的签名。 此方法对于暴露用于基于显式签名选择重载构造函数的功能非常有用,因为Dynalink不会另外公布此功能,因为StaticClass对象充当未进行显式签名选择的重载构造函数。 示例用法为: getConstructorMethod(java.awt.Color.class, "int, int, int")
        参数
        clazz - 课
        signature - 构造函数的完整签名。 注意,如何使用原始类型的名称,使用正常Java符号的数组名称(例如"int[]" ),通常您甚至可以使用不合格的类名(例如"String, List"而不是"java.lang.String, java.util.List" ,只要它们不会在特定参数位置引起歧义。
        结果
        构造函数的动态方法,如果没有指定签名的构造函数存在,则为null。
      • getReadableInstancePropertyNames

        public static Set<String> getReadableInstancePropertyNames​(Class<?> clazz)
        返回一组类的所有可读实例属性的名称。
        参数
        clazz - 班
        结果
        一组类的所有可读实例属性的名称。
      • getWritableInstancePropertyNames

        public static Set<String> getWritableInstancePropertyNames​(Class<?> clazz)
        返回一组类的所有可写实例属性的名称。
        参数
        clazz - 课
        结果
        一组类的所有可写实例属性的名称。
      • getInstanceMethodNames

        public static Set<String> getInstanceMethodNames​(Class<?> clazz)
        返回一组类的所有实例方法的名称。
        参数
        clazz - 该类
        结果
        一组类的所有实例方法的名称。
      • getReadableStaticPropertyNames

        public static Set<String> getReadableStaticPropertyNames​(Class<?> clazz)
        返回一组类的所有可读静态属性的名称。
        参数
        clazz - 课
        结果
        一组类的所有可读静态属性的名称。
      • getWritableStaticPropertyNames

        public static Set<String> getWritableStaticPropertyNames​(Class<?> clazz)
        返回一组类的所有可写静态属性的名称。
        参数
        clazz - 班
        结果
        一组类的所有可写静态属性的名称。
      • getStaticMethodNames

        public static Set<String> getStaticMethodNames​(Class<?> clazz)
        返回类的所有静态方法的一组名称。
        参数
        clazz - 班
        结果
        一组类的所有静态方法的名称。
      • getGuardedInvocation

        public GuardedInvocation getGuardedInvocation​(LinkRequest request,
                                                      LinkerServices linkerServices)
                                               throws 异常
        描述从接口GuardingDynamicLinker复制
        在调用站点上创建一个适合于具有指定参数的特定调用的保护调用。
        Specified by:
        getGuardedInvocation在接口 GuardingDynamicLinker
        参数
        request - 描述链接特定调用的请求的对象
        linkerServices - 链接器服务
        结果
        使用适合参数的方法句柄进行保护调用,以及如果失败的触发器将重新链接的保护条件。 如果无法解析调用,则必须返回null。 如果返回的调用是无条件的(实际上很少见),返回值中的guard可以为null。 调用也可以有任何数量的切换点用于链接的异步无效,以及一个描述预期的异常情况的Throwable子类,它也触发重新链接(通常情况下,依赖于一个不频繁但预期为ClassCastException异常情况更快。评估instanceof警卫)。 链接器必须使用与链接请求的调用站点描述符中的参数类型相匹配的参数类型进行调用,但不应尝试匹配在调用站点中预期的返回类型,除非可以仅使用既不损失精度的转换也没有大小,见LinkerServices.asTypeLosslessReturn(MethodHandle, MethodType)进一步解释。
        异常
        异常 - 如果由于任何原因操作失败