- java.lang.Object
-
- jdk.dynalink.beans.BeansLinker
-
- 实现的所有接口
-
GuardingDynamicLinker
public class BeansLinkerextends Objectimplements GuardingDynamicLinker
普通Java对象的链接器。 通常用作DynamicLinkerFactory
的最终回退链接器,因此它有机会将调用链接到没有其他链接器识别的所有对象。 具体来说,此链接器将:- 公开形式的所有公共方法
setXxx()
,getXxx()
和isXxx()
的财产getter和setter方法StandardOperation.SET
个StandardOperation.GET
在操作StandardNamespace.PROPERTY
命名空间; - 在
StandardNamespace.METHOD
命名空间中公开用于检索StandardOperation.GET
操作的所有公共方法; 然后可以使用StandardOperation.CALL
调用如此检索的方法。 - 将所有公共字段公开为属性,除非有相同名称的属性的getter或setter;
- 在
StandardNamespace.ELEMENT
命名空间中公开本机Java数组的元素,List
和Map
对象作为StandardOperation.GET
和StandardOperation.SET
操作; - 在
StandardNamespace.ELEMENT
命名空间中将List
和Map
对象的元素删除为StandardOperation.REMOVE
操作; - 在Java数组,
Collection
和Map
对象上公开名为length
的虚拟属性; - 在
StaticClass
的实例上公开StandardOperation.NEW
作为对构造函数的调用,包括那些表示Java数组的静态类对象(它们的构造函数采用单个int
参数表示要创建的数组的长度); - 在
StaticClass
对象上,以与实例方法,字段和属性的公开方式类似的方式公开类的静态方法,字段和属性。 - 公开名为虚拟财产
static
上的实例类
访问他们StaticClass
。
对属性设置器,方法和构造函数自动执行重载方法解析 。 此外,通过让调用站点为包含显式签名的方法指定名称来支持手动重载方法选择,例如
StandardOperation.GET.withNamespace(METHOD).named("parseInt(String,int)")
您可以在此类签名中使用非限定类名,而不管这些类的包,它们将匹配任何类具有相同的非限定名称。 您只需使用完全限定的类名,以防非限定类名称会导致选择模糊(这种情况极为罕见)。 构造函数的重载分辨率不是自动的,因为没有逻辑位置来附加该功能,但如果某种语言希望提供此功能,它可以使用getConstructorMethod(Class, String)
作为它的有用构建块。为方法和构造函数处理变量参数调用 。
呼叫者敏感方法可以链接,只要它们是公共的并且链接请求具有呼叫站点描述符携带全强度
MethodHandles.Lookup
对象而不是弱化查找或公共查找。处理缺失成员的行为可以通过将
MissingMemberHandlerFactory
传递给构造器
来自定义 。该类还公开了各种方法,用于在类和类实例上发现可用属性和方法名称,以及使用
getLinkerForClass(Class)
方法访问每类链接器。
-
-
构造方法摘要
构造方法 构造器 描述 BeansLinker()
创建一个新的bean链接器。BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
使用指定的工厂创建新的bean链接器,以创建缺少的成员处理程序。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 static Object
getConstructorMethod(类<?> clazz, String signature)
返回给定类和给定签名的构造函数的动态方法。static Set<String>
getInstanceMethodNames(类<?> clazz)
返回类的所有实例方法的一组名称。TypeBasedGuardingDynamicLinker
getLinkerForClass(类<?> clazz)
返回特定单个类的bean链接器。static Set<String>
getReadableInstancePropertyNames(类<?> clazz)
返回类的所有可读实例属性的一组名称。static Set<String>
getReadableStaticPropertyNames(类<?> clazz)
返回类的所有可读静态属性的一组名称。static Set<String>
getStaticMethodNames(类<?> clazz)
返回类的所有静态方法的一组名称。static Set<String>
getWritableInstancePropertyNames(类<?> clazz)
返回类的所有可写实例属性的一组名称。static Set<String>
getWritableStaticPropertyNames(类<?> clazz)
返回类的所有可写静态属性的一组名称。static boolean
isDynamicConstructor(Object obj)
如果对象是Java构造函数(通过getConstructorMethod(Class, String)
获得),则返回true。static boolean
isDynamicMethod(Object obj)
如果对象是Java动态方法(例如,通过Java对象或StaticClass
或getConstructorMethod(Class, String)
上的GET:METHOD
操作获得的方法),则返回true。-
声明方法的类 java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
声明方法的接口 jdk.dynalink.linker.GuardingDynamicLinker
getGuardedInvocation
-
-
-
-
构造方法详细信息
-
BeansLinker
public BeansLinker()
创建一个新的bean链接器。 相当于BeansLinker(MissingMemberHandlerFactory)
,其中null
作为缺少的成员处理程序工厂传递,从而导致链接和评估缺少成员的默认行为。
-
BeansLinker
public BeansLinker(MissingMemberHandlerFactory missingMemberHandlerFactory)
- 参数
-
missingMemberHandlerFactory
- 用于为缺失成员的操作创建处理程序的工厂。
-
-
方法详细信息
-
getLinkerForClass
public TypeBasedGuardingDynamicLinker getLinkerForClass(类<?> clazz)
返回特定单个类的bean链接器。 当您需要覆盖或扩展语言运行时链接器中某些类的链接行为时,这很有用,但在某些情况下仍希望委托默认行为。- 参数
-
clazz
- 该课程 - 结果
- 该类的bean链接器
-
isDynamicMethod
public static boolean isDynamicMethod(Object obj)
如果对象是Java动态方法(例如,通过Java对象或StaticClass
或getConstructorMethod(Class, String)
上的GET:METHOD
操作获得的方法),则返回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(类<?> 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(类<?> clazz)
返回类的所有可读实例属性的一组名称。- 参数
-
clazz
- 该课程 - 结果
- 类的所有可读实例属性的一组名称。
-
getWritableInstancePropertyNames
public static Set<String> getWritableInstancePropertyNames(类<?> clazz)
返回类的所有可写实例属性的一组名称。- 参数
-
clazz
- 该课程 - 结果
- 类的所有可写实例属性的一组名称。
-
getInstanceMethodNames
public static Set<String> getInstanceMethodNames(类<?> clazz)
返回类的所有实例方法的一组名称。- 参数
-
clazz
- 上课 - 结果
- 一组类的所有实例方法的名称。
-
getReadableStaticPropertyNames
public static Set<String> getReadableStaticPropertyNames(类<?> clazz)
返回类的所有可读静态属性的一组名称。- 参数
-
clazz
- 该课程 - 结果
- 一组类的所有可读静态属性的名称。
-
getWritableStaticPropertyNames
public static Set<String> getWritableStaticPropertyNames(类<?> clazz)
返回类的所有可写静态属性的一组名称。- 参数
-
clazz
- 上课 - 结果
- 一组类的所有可写静态属性的名称。
-
-