【问题标题】:Fast implement wrapping (delegate methods) in Eclipse?在 Eclipse 中快速实现包装(委托方法)?
【发布时间】:2013-03-02 02:00:59
【问题描述】:

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

例如,假设我有

public class MyClass implements List<Something> {

    private final List<Something> core;

...
}

现在我想通过调用 Wrapped like 来实现 List&lt;Something&gt;

@Override
public int size() {
    return core.size();
}

等等。

【问题讨论】:

    标签: java eclipse wrapper code-assist code-templates


    【解决方案1】:

    我会多说一点关于“生成委托方法”重构如何创建一个您描述的转发类。

    你创建一个新类,它可以选择实现接口,并为它提供一个你想要删除的类型的字段,例如:

    public class NewClass implements ThatInterface {
      private final ThatInterface delegate;
    
      public MyClass(ThatInterface delegate) {
        this.delegate = delegate();
      }
    }
    

    然后您应用 Eclipse 重构。 (Cmd-3 deleg... 是访问它的一种简单方法。)选中新字段的复选框。它的所有方法都将作为委托添加。

    (我认为在 Eclipse 氧气的重构中存在一个错误,它将从接口上带有该关键字的方法中复制 default 关键字。您可能需要删除该关键字。)

    因此,对于 List 的委托,重构产生:

    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);
       }
    

    等等……

    【讨论】:

      【解决方案2】:

      在 Luna 中测试。

      使用快捷键Alt-Shift-SM 2次。按 Enter

      【讨论】:

        【解决方案3】:

        有。使用 Source 菜单->Generate Delegate Methods...

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 2011-12-04
          • 1970-01-01
          • 2021-12-28
          • 2012-04-02
          • 2019-08-17
          相关资源
          最近更新 更多