将未实现的方法委托给Java中包含的对象的最短方法是什么? [等候接听]

前端之家收集整理的这篇文章主要介绍了将未实现的方法委托给Java中包含的对象的最短方法是什么? [等候接听]前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在“辅助对象”中包含“主要对象”(具有大多数功能),这将提供方便的方法.我只有一个接口可用,除了返回的对象与工厂方法的接口.我在想一个“扩展”这个对象的好方法是组合,但是我的超类必须实现主对象接口的问题,这将是大约600行的存根代码.

显然,一个简单但冗长的解决方案是填写所有存根,以便它们只调用主对象的方法.在Java中有比这更好的方法吗?在我熟悉的其他语言中,有一些方法可以为辅助对象中未实现的方法执行自动委派.

例:

class Helper implements Interface {
    Primary primary;

    Helper(Primary _primary) {
        primary = _primary;
    }

    void helper() {
        doStuff();
    }

    // 500 lines of this
    void stub() {
        primary.stub();
    }
}

注意:

最初的计划是使用正则表达式将Eclipse中的所有存根TODO替换为实际调用.将寻找一个自动执行此操作的Eclipse工具.此外,看起来扩展接口或使用代理最终更好,所以将追求.

解决方法

有一些可能性.

第一:使用委托调用的抽象实现.

abstract class InterfaceDelegator implements Interface {
  protected final Interface primary;
  public InterfaceDelegator() {
    this.primary = primary;
  }
  // implements all the calls as: primary.call(...)
}

class Helper extends InterfaceDelegator {
  // override just the methods you need
}

第二:使用代理(可能更干净).

见:http://docs.oracle.com/javase/1.5.0/docs/guide/reflection/proxy.html

final Interface primary = ...;
return (Interface) Proxy.newProxyInstance(Inteface.class.getClassLoader(),new Class[] { Interface.class },new InvocationHandler() {
     public Object invoke(Object proxy,Method m,Object[] args) throws Throwable {
       // if m is a method that you want to change the behavIoUr of,return something
       // by default,delegate to the primary
       return m.invoke(primary,args);
     }
   });

调用处理程序将通过执行您已编码的方法来处理调用,而其他所有方法都将委派给主实现.
然后,您可以在方法或其他工厂中包装这样的代码.

第三:使用IDE生成方法(正如其他人指出的那样).

原文链接:https://www.f2er.com/java/127280.html

猜你在找的Java相关文章