类 CompositeDataInvocationHandler

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

public class CompositeDataInvocationHandler extends Object implements InvocationHandler

将 getter 方法转发给 CompositeData InvocationHandler 。如果您的接口仅包含 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"}
    );
  
然后你可以构造一个实现 NamedNumber 并由对象 cd 支持的对象,如下所示:
  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) ,那么当且仅当参数是一个 ProxyInvocationHandler 也是一个 CompositeDataInvocationHandler 并且其支持 CompositeData 与该对象的支持相等(不一定相同)时,它将返回 true。如果给 invoke 的方法是继承自 Object 的方法 int hashCode(),那么它将返回一个与 equals 的定义一致的值:如果根据 equals 两个对象相等,那么它们将具有相同的 hashCode

自从:
1.6
  • 构造方法详细信息

    • CompositeDataInvocationHandler

      public CompositeDataInvocationHandler(CompositeData  compositeData)

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

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

    • getCompositeData

      public CompositeData  getCompositeData()
      返回提供给构造函数的 CompositeData
      返回:
      该处理程序支持的 CompositeData。这永远不会为空。
    • 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 将由方法调用抛出代理实例。
      参见: