public class MethodHandleProxies extends Object
Modifier and Type | Method and Description |
---|---|
static <T> T |
asInterfaceInstance(类<T> intfc, MethodHandle target)
生产的单一方法的接口,将其调用的方法处理实例。
|
static boolean |
isWrapperInstance(Object x)
确定给定的对象是通过调用产生
asInterfaceInstance 。
|
static MethodHandle |
wrapperInstanceTarget(Object x)
产生或恢复目标的方法处理的是行为等同于此包装实例的唯一方法。
|
static 类<?> |
wrapperInstanceType(Object x)
恢复此包装实例创建的唯一的单一方法接口类型。
|
public static <T> T asInterfaceInstance(类<T> intfc, MethodHandle target)
一个单一的方法接口是一个声明了一个唯一命名的方法的接口。确定独特的命名方法,单一方法接口时,公众Object
方法(toString
,equals
,hashCode
)被忽视。例如,Comparator
是一个方法的接口,即使它再宣布Object.equals
方法。
接口必须是公共的。没有执行额外的访问检查。
所要求的类型的实例将响应调用给定的传入参数的唯一命名方法的调用,并返回或抛出目标返回或抛出的任何目标。该调用将如target.invoke
。目标的类型将在创建实例验证,如果通过调用asType
,这可能导致WrongMethodTypeException
。
唯一命名的方法是允许多声明的,具有不同类型的描述符。(例如,它可以重载,或可以具有桥方法。)所有这些声明都直接连接到目标方法句柄。参数和返回类型是由每个个体asType
宣言。
包装实例将实现所要求的接口和它的超级类型,但没有其他单一的方法接口。这意味着实例不会意外地通过任何未经请求的类型的一个instanceof
试验。
实施说明:因此,每个实例必须实现一个唯一的单一方法接口。实现可能不捆绑在一起的多个单方法接口到单一的实现类在AWTEventMulticaster
风格。
处理方法可能会抛出一个未申报的例外,这意味着任何检查的异常(或其他检查异常)的请求类型的单一的抽象方法声明。如果发生这种情况,错误将包裹在UndeclaredThrowableException
实例并被包裹的形式。
像Integer.valueOf
,asInterfaceInstance
是工厂方法的结果是由他们的行为定义。它不保证返回一个新的实例,为每一个电话。
由于对bridge methods等案例的可能性,该接口还可以具有相同名称的几个抽象方法但具有不同的描述符(返回参数类型)。在这种情况下,所有的方法都是绑定在一个给定的目标。类型检查和有效的asType
转换应用到每个方法的类型描述符,和所有的抽象方法绑定到目标共同。除了这种类型的检查,没有进一步的检查,以确定抽象的方法是以任何方式相关的。
这个版本的未来版本可能会接受其他类型,如抽象类与单一的抽象方法。这个版本的未来版本也可以装备一个或多个额外的公共“标记”接口的包装器实例。
如果安装了一个安全管理器,该方法是调用方敏感的。在通过返回的包装器调用目标方法句柄的过程中,包装器(调用方)的原始创建者将在安全管理器请求的上下文检查中可见。
T
-包装所需的类型,一个方法的接口
intfc
-代表
T
类对象
target
-处理方法调用的包装
NullPointerException
-如果任一参数为null
IllegalArgumentException
-如果
intfc
不是这个方法有效性的争论
WrongMethodTypeException
-如果目标不能转换为所需的请求的接口的类型
public static boolean isWrapperInstance(Object x)
asInterfaceInstance
。
x
任何参考
asInterfaceInstance
对象
public static MethodHandle wrapperInstanceTarget(Object x)
x
任何参考
IllegalArgumentException
-如果参考X不到包装实例
public static 类<?> wrapperInstanceType(Object x)
x
任何参考
IllegalArgumentException
-如果参考X不到包装实例
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.