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
构造如下:
那么你可以构造一个实现NamedNumberCompositeData cd = newCompositeDataSupport
( someCompositeType, new String[] {"number", "name"}, new Object[] {5, "five"} );
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