public class CompositeDataInvocationHandler extends Object implements InvocationHandler
一个InvocationHandler ,它将getter方法转发到一个CompositeData 。 如果你有只包含吸气剂的方法(例如接口String getName()或boolean isActive() ),则可以结合使用这个类与Proxy类以产生其中每个吸气剂返回对应的项的一个的值的接口的实现CompositeData 。
例如,假设你有一个这样的接口:
public interface NamedNumber {
public int getNumber();
public String getName();
}
和一个CompositeData构造如下:
CompositeData cd =
new CompositeDataSupport(
someCompositeType,
new String[] {"number", "name"},
new Object[] {5, "five"}
);
那么你可以构造一个实现NamedNumber NamedNumber对象支持的对象cd如下所示:
InvocationHandler handler =
new CompositeDataInvocationHandler(cd);
NamedNumber nn = (NamedNumber)
Proxy.newProxyInstance(NamedNumber.class.getClassLoader(),
new Class[] {NamedNumber.class},
handler);
然后拨打nn.getNumber()将返回5 。
如果由吸气剂定义的财产的第一个字母是大写字母,那么这个处理程序将首先CompositeData CompositeData中以资本开头的项目,然后如果没有找到,则以相应的小写字母开头的项目代码点。 对于一个名为getNumber()的getter,处理程序将首先查找一个名为Number的项,然后查找number 。 如果吸气剂被称为getnumber() ,则该项目必须称为number 。
如果给予方法invoke是方法boolean equals(Object)从继承Object ,则它将当且仅当所述参数是一个返回true Proxy其InvocationHandler也是CompositeDataInvocationHandler ,其背衬CompositeData等于(不一定相同)此对象的。 如果给出invoke的方法是从Object的方法int hashCode() ,那么它将返回与equals的这个定义一致的equals :如果两个对象根据equals ,那么它们将具有相同的hashCode 。
| Constructor and Description |
|---|
CompositeDataInvocationHandler(CompositeData compositeData)
构造一个由给定的
CompositeData支持的处理程序。
|
| Modifier and Type | Method and Description |
|---|---|
CompositeData |
getCompositeData()
返回
CompositeData这是提供给构造。
|
Object |
invoke(Object proxy, 方法 method, Object[] args)
处理代理实例上的方法调用并返回结果。
|
public CompositeDataInvocationHandler(CompositeData compositeData)
构造一个由给定的CompositeData支持的处理程序。
compositeData -
CompositeData提供信息的CompositeData。
IllegalArgumentException - 如果
compositeData为空。
public CompositeData getCompositeData()
CompositeData这是提供给构造。
CompositeData 。
这从来不为空。
public Object invoke(Object proxy, 方法 method, Object[] args) throws Throwable
InvocationHandler
invoke在接口
InvocationHandler
proxy - 调用该方法的代理实例
method -所述方法对应于调用代理实例上的接口方法的实例。
方法对象的声明类将是方法声明的接口,它可以是代理接口的超级接口,代理类继承方法。
args -包含的方法调用传递代理实例的参数值的对象的阵列,或null如果接口方法没有参数。
原始类型的参数包含在适当的原始包装器类的实例中,例如java.lang.Integer或java.lang.Boolean 。
null和接口方法的返回类型是基本类型,那么NullPointerException将由代理实例的方法调用抛出。
如上所述,如果此方法返回的值,否则不会与接口方法的声明的返回类型兼容,一个ClassCastException将代理实例的方法调用将抛出。
Throwable - 从代理实例上的方法调用抛出的异常。
异常类型必须可以分配给接口方法的throws子句中声明的任何异常类型java.lang.RuntimeException检查的异常类型java.lang.RuntimeException或java.lang.Error 。
如果检查的异常是由这种方法是不分配给任何的中声明的异常类型throws接口方法的子句,则一个UndeclaredThrowableException包含有由该方法抛出的异常将通过在方法调用抛出代理实例。
UndeclaredThrowableException
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.