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

Posted

技术标签:

【中文标题】在 Eclipse 中快速实现包装(委托方法)?【英文标题】:Fast implement wrapping (delegate methods) in 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();

等等。

【问题讨论】:

【参考方案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...

【讨论】:

以上是关于在 Eclipse 中快速实现包装(委托方法)?的主要内容,如果未能解决你的问题,请参考以下文章

用委托或 lambda 包装秒表计时?

PromiseKit 4 - 包装委托

委托的一般使用

C#中的委托

使用委托包装异常处理时,Web-API 调用不起作用

CLR via C# 笔记 -- 委托(17)