Module java.management

Class CompositeDataInvocationHandler

java.lang.Object
javax.management.openmbean.CompositeDataInvocationHandler
所有已实现的接口:
InvocationHandler

public class CompositeDataInvocationHandler extends Object implements InvocationHandler

一个InvocationHandler,将getter方法转发到CompositeData。如果您有一个只包含getter方法(例如String getName()boolean isActive())的接口,那么您可以与Proxy类一起使用此类,以生成一个实现接口的对象,其中每个getter返回CompositeData中相应项目的值。

例如,假设您有这样一个接口:

   public interface NamedNumber {
       public int getNumber();
       public String getName();
   }
   
和一个这样构建的CompositeData
   CompositeData cd =
       new CompositeDataSupport(
           someCompositeType,
           new String[] {"number", "name"},
           new Object[] {5, "five"}
       );
   
那么您可以这样构建一个由对象cd支持的实现NamedNumber的对象:
   InvocationHandler handler =
       new CompositeDataInvocationHandler(cd);
   NamedNumber nn = (NamedNumber)
       Proxy.newProxyInstance(NamedNumber.class.getClassLoader(),
                              new Class[] {NamedNumber.class},
                              handler);
   
调用nn.getNumber()将返回5

如果getter定义的属性的第一个字母是大写,则此处理程序将首先查找以大写字母开头的CompositeData中的项目,然后,如果找不到,则查找以相应小写字母或代码点开头的项目。对于名为getNumber()的getter,处理程序将首先查找名为Number的项目,然后查找number。如果getter名为getnumber(),则项目必须称为number

如果传递给invoke的方法是从Object继承的方法boolean equals(Object),则仅当参数是Proxy且其InvocationHandler也是CompositeDataInvocationHandler且其支持的CompositeData等于(不一定是相同的)此对象时,它才会返回true。如果传递给invoke的方法是从Object继承的方法int hashCode(),则它将返回与equals定义一致的值:如果根据equals两个对象相等,则它们将具有相同的hashCode

自版本:
1.6
  • Constructor Details

    • CompositeDataInvocationHandler

      public CompositeDataInvocationHandler(CompositeData compositeData)

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

      参数:
      compositeData - 将向getter方法提供信息的CompositeData
      抛出:
      IllegalArgumentException - 如果compositeData为null。
  • Method Details

    • getCompositeData

      public CompositeData getCompositeData()
      返回构造函数提供的CompositeData
      返回:
      此处理程序支持的CompositeData。永远不会为null。
    • invoke

      public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
      从接口复制的描述: InvocationHandler
      处理代理实例上的方法调用并返回结果。当在与其关联的代理实例上调用方法时,此方法将在调用处理程序上调用。
      指定者:
      invoke 在接口 InvocationHandler
      参数:
      proxy - 调用方法的代理实例
      method - 与在代理实例上调用的接口方法对应的Method实例。Method对象的声明类将是声明该方法的接口,该接口可能是代理接口通过该接口继承方法的超接口。
      args - 包含在代理实例上方法调用中传递的参数值的对象数组,如果接口方法不带参数,则为null。原始类型的参数将包装在适当的原始包装类的实例中,例如java.lang.Integerjava.lang.Boolean
      返回:
      从代理实例上的方法调用返回的值。如果接口方法的声明返回类型是原始类型,则此方法返回的值必须是相应原始包装类的实例;否则,它必须是可分配给声明的返回类型的类型。如果此方法返回的值为null且接口方法的返回类型是原始类型,则代理实例上的方法调用将抛出NullPointerException。如果此方法返回的值与上述描述的接口方法的声明返回类型不兼容,则代理实例上的方法调用将抛出ClassCastException
      抛出:
      Throwable - 从代理实例上的方法调用中抛出的异常。异常的类型必须分配给接口方法的throws子句中声明的任何异常类型或未检查的异常类型java.lang.RuntimeExceptionjava.lang.Error。如果此方法抛出了一个不可分配给接口方法的throws子句中声明的任何异常类型的已检查异常,则代理实例上的方法调用将抛出包含此方法抛出的异常的UndeclaredThrowableException
      参见: