java示例代码_使用decorator模式时保留接口

     2022-04-16     145

关键词:

java示例代码_使用decorator模式时保留接口

class D<T_I extends I> implements InvocationHandler, I 

  public static <T_I extends I> T_I decorate(T_I wrappedValue) 
    return (T_I)Proxy.newProxyInstance(
        wrappedValue.getClass().getClassLoader(),
        getAllInterfaces(wrappedValue.getClass()),
        new D<T_I>(wrappedValue));
  

  private static Class[] getAllInterfaces(Class type) 
    if (type.isInterface()) 
      Class[] all = new Class[type.getInterfaces().length + 1];
      int i = 0;
      all[i++] = type;
      for (Class t : type.getInterfaces()) 
        all[i++] = t;
      
      return all;
     else 
      return type.getInterfaces();
    
  


  private final T_I wrappedValue;

  private D(T_I wrappedValue) 
    this.wrappedValue = wrappedValue;
  

  public Object invoke(Object proxy, Method method, Object[] args) 
    if (method.getDeclaringClass() == I.class) 
      // call wrapped method in D
      return method.invoke(this, args);
    
    //call unwrapped method of other interface
    return methos.invoke(wrappedValue, args);
  

  // Methods for I

java示例代码_在使用SAX进行解析时,保留未绑定到对象的XML节点

java示例代码_在使用SAX进行解析时,保留未绑定到对象的XML节点 查看详情

java示例代码_解析日期时保留时区

java示例代码_解析日期时保留时区 查看详情

java示例代码_当模式包含左括号时,如何使用java正则表达式替换all

java示例代码_当模式包含左括号时,如何使用java正则表达式替换all 查看详情

java示例代码_在一个线程处于睡眠模式时实现多线程

java示例代码_在一个线程处于睡眠模式时实现多线程 查看详情

java示例代码_在首次部署应用程序时运行查询,然后在剩余的生命周期中保留数据

java示例代码_在首次部署应用程序时运行查询,然后在剩余的生命周期中保留数据 查看详情

java示例代码_使用复合模式访问特定叶

java示例代码_使用复合模式访问特定叶 查看详情

java示例代码_从JSON解析到使用JSON Simple映射并保留键顺序

java示例代码_从JSON解析到使用JSON Simple映射并保留键顺序 查看详情

java示例代码_使用观察者设计模式

java示例代码_使用观察者设计模式 查看详情

java示例代码_使用xml模式验证xml

java示例代码_使用xml模式验证xml 查看详情

java示例代码_使用模式匹配获取子字符串

java示例代码_使用模式匹配获取子字符串 查看详情

java示例代码_使ProGuard保留完整(完整)类(带有字段和方法),而不使用"-保持";

java示例代码_使ProGuard保留完整(完整)类(带有字段和方法),而不使用"-保持"; 查看详情

java示例代码_使用Java正则表达式匹配此模式

java示例代码_使用Java正则表达式匹配此模式 查看详情

java示例代码_在Java中查找多个模式(使用Matcher)

java示例代码_在Java中查找多个模式(使用Matcher) 查看详情

java示例代码_使用java在liquibase中区分两个新模式

java示例代码_使用java在liquibase中区分两个新模式 查看详情

java示例代码_在Java中使用XSD模式验证XML

java示例代码_在Java中使用XSD模式验证XML 查看详情

java示例代码_(在Eclipse中使用处理库)如何使用窗口模式

java示例代码_(在Eclipse中使用处理库)如何使用窗口模式 查看详情

java示例代码_转换此代码,使其现在使用依赖项注入模式

java示例代码_转换此代码,使其现在使用依赖项注入模式 查看详情

java示例代码_在Android项目中使用单例模式

java示例代码_在Android项目中使用单例模式 查看详情