在Java中自动代表团(Automated delegation in Java)

2019-07-03 18:11发布

我想添加一些功能到将在运行时生成的对象。 然而,此对象的接口是非常大的(而不是在我的控制)。 我想换对象在自己的类,它增加了我想要的功能和委托的标准接口功能,原来的对象 - 有没有办法做到这一点在Java中没有为每创建一个1行复制粘贴委托方法方法的接口?

我想避免什么:

class MyFoo implements Foo {
  Foo wrapped;

  void myMethod() { ... }

  void interfaceMethod1() wrapped.interfaceMethod1();
  int interfaceMethod2() wrapped.interfaceMethod2();
  // etc etc ...
}

我宁愿:

class MyFoo implements Foo {
  Foo wrapped;

  void myMethod() { ... }

  // automatically delegate undefined methods to wrapped object
}

Answer 1:

听起来像是你需要一个动态代理和拦截只是要覆盖的方法。

的动态代理类是实现在运行时指定的接口列表的类,使得通过对类的一个实例的一个接口方法调用将被编码,并通过一个统一的接口分派给另一个对象。 因此,动态代理类可用于创建的接口的列表的类型安全代理对象,而不需要预先生成代理类,诸如编译时的工具。 上的动态代理类的实例方法调用被分派到在该实例的调用处理程序的单一方法 ,以及它们与java.lang.reflect.Method中对象识别编码被调用的方法和类型的对象包含的阵列参数

(我的重点)

通过实施的InvocationHandler您只需创建,其接收对象每次调用一个方法(实际上您在上面描述的内容)



文章来源: Automated delegation in Java