Java中的自动委派

Ani*_*der 6 java delegates

我想为将在运行时生成的对象添加一些功能.但是,此对象的界面非常大(并且不受我的控制).我想将对象包装在我自己的类中,它添加了我想要的功能并将标准接口功能委托给原始对象 - 有没有办法在Java中执行此操作而不为每个创建一行复制粘贴委托方法界面中的方法?

我想避免的:

class MyFoo implements Foo {
  Foo wrapped;

  void myMethod() { ... }

  void interfaceMethod1() wrapped.interfaceMethod1();
  int interfaceMethod2() wrapped.interfaceMethod2();
  // etc etc ...
}
Run Code Online (Sandbox Code Playgroud)

我更喜欢什么:

class MyFoo implements Foo {
  Foo wrapped;

  void myMethod() { ... }

  // automatically delegate undefined methods to wrapped object
}
Run Code Online (Sandbox Code Playgroud)

Bri*_*new 11

听起来你需要一个动态代理并只截取你想要覆盖的方法.

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

(我的重点)

通过实现InvocationHandler,您只需创建一个接收该对象上每个调用的方法(实际上您已经描述过)

  • +1,正是我会用的.有关一些代码示例,请参阅我的答案[here](http://stackoverflow.com/a/12486028/646634). (2认同)
  • 是否可以有编译时代理? (2认同)