Module  java.management

Class CompositeDataInvocationHandler

  • All Implemented Interfaces:
    InvocationHandler


    public class CompositeDataInvocationHandler
    extends Object
    implements InvocationHandler

    一个InvocationHandler ,将getter方法转发到一个CompositeData 如果你有一个仅包含getter方法的接口(例如String getName()boolean isActive() ),那么可以将这个类与Proxy类一起使用,以生成接口的实现,每个getter返回CompositeData相应项的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并由对象cd支持的对象,如下所示:
       InvocationHandler handler =
           new CompositeDataInvocationHandler(cd);
       NamedNumber nn = (NamedNumber)
           Proxy.newProxyInstance(NamedNumber.class.getClassLoader(),
                                  new Class[] {NamedNumber.class},
                                  handler);
       
    然后拨打nn.getNumber()将返回5

    如果由吸气剂定义的财产的第一个字母是大写字母,那么这个处理程序将首先查看CompositeData以资本开头的项目,然后如果没有找到,则以对应的小写字母开头的项目代码点。 对于一个名为getNumber()的getter,处理程序将首先查找一个名为Number的项,然后查找number 如果吸气剂称为getnumber() ,则该项目必须称为number

    如果给出invoke的方法boolean equals(Object)继承自Object的方法boolean equals(Object) ,那么当且仅当该参数是ProxyInvocationHandler也是CompositeDataInvocationHandler并且其背景CompositeData与该对象的等同(不一定相同)时将返回true。 如果给予invoke的方法int hashCode()继承自Object的方法int hashCode() ,则它将返回与equals此定义一致的值:如果两个对象根据equals相等,则它们将具有相同的hashCode

    从以下版本开始:
    1.6
    • 构造方法详细信息

      • CompositeDataInvocationHandler

        public CompositeDataInvocationHandler​(CompositeData compositeData)

        构造由给定的CompositeData支持的处理程序。

        参数
        compositeData - CompositeData将向 CompositeData提供信息。
        异常
        IllegalArgumentException - 如果 compositeData为空。
    • 方法详细信息

      • getCompositeData

        public CompositeData getCompositeData​()
        返回提供给构造函数的 CompositeData
        结果
        这个处理程序支持的CompositeData 这从来不为空。
      • invoke

        public Object invoke​(Object proxy,
                             方法 method,
                             Object[] args)
                      throws Throwable
        说明从接口InvocationHandler复制
        处理代理实例上的方法调用并返回结果。 当在与之关联的代理实例上调用方法时,将在调用处理程序中调用此方法。
        Specified by:
        invoke在接口 InvocationHandler
        参数
        proxy - 调用该方法的代理实例
        method - 对应于在代理实例上调用的接口方法的方法实例。 方法对象的声明类将是方法声明的接口,它可以是代理类继承方法的代理接口的超级接口。
        args - 包含代理实例上方法调用中传递的参数值的对象数组,如果接口方法不带参数, null 原始类型的参数包含在适当的原始包装器类的实例中,例如java.lang.Integerjava.lang.Boolean
        结果
        从代理实例上的方法调用返回的值。 如果接口方法的声明返回类型是原始类型,则此方法返回的值必须是对应的基本包装类的实例; 否则,它必须是可声明返回类型的类型。 如果此方法返回的值为null ,并且接口方法的返回类型是原始的,那么代理实例上的方法调用将抛出一个NullPointerException 如果由此方法返回的值与接口方法声明的返回类型不兼容,则代理实例上的方法调用将抛出ClassCastException
        异常
        Throwable - 从代理实例上的方法调用抛出的异常。 异常类型必须可以分配给接口方法的throws子句中声明的任何异常类型或未检查的异常类型java.lang.RuntimeExceptionjava.lang.Error 如果此方法抛出一个检查的异常,该方法不能分配给接口方法的throws子句中声明的任何异常类型,则包含此方法抛出的异常的UndeclaredThrowableException将被引用在方法调用代理实例。
        另请参见:
        UndeclaredThrowableException