在Eclipse中快速实现包装(委托方法)?

Suz*_*ioc 21 java eclipse wrapper code-templates code-assist

是否有一些模板或东西来实现iterface方法访问包装成员?

例如,假设我有

public class MyClass implements List<Something> {

    private final List<Something> core;

...
}
Run Code Online (Sandbox Code Playgroud)

现在我想List<Something>通过将调用传递给包装来实现

@Override
public int size() {
    return core.size();
}
Run Code Online (Sandbox Code Playgroud)

等等.

sha*_*kan 28

有.使用源菜单 - >生成委托方法...


Jos*_*erg 6

我将更多地说一下"生成委托方法"重构如何工作来创建像你描述的转发类.

您创建了一个可选择实现接口的新类,并为其提供了一个具有您想要degate类型的字段,例如:

public class NewClass implements ThatInterface {
  private final ThatInterface delegate;

  public MyClass(ThatInterface delegate) {
    this.delegate = delegate();
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你应用eclipse重构.(Cmd-3 deleg ...是一种访问它的简单方法.)选择新字段的复选框.它的所有方法都将作为代表添加.

(我认为,在Eclipse氧气的重构中存在一个错误,它会default在界面上使用该关键字的方法复制关键字.您可能需要删除该关键字.)

因此,对于列表的委托,生成了重构:

public class NewClass {
   private final List<String> delegate;

   public NewClass(List<String> delegate) {
       this.delegate = delegate;
   }


   public void forEach(Consumer<? super String> action) {
       delegate.forEach(action);
   }
   public int size() {
       return delegate.size();
   }
   public boolean isEmpty() {
       return delegate.isEmpty();
   }
   public boolean contains(Object o) {
       return delegate.contains(o);
   }
Run Code Online (Sandbox Code Playgroud)

等等...