Fast implement wrapping (delegate methods) in Eclipse?

前端 未结 3 1794
旧巷少年郎
旧巷少年郎 2020-12-11 00:16

Is there some template or something to implement iterface methods with accessing to wrapped member?

For example, suppose I have

public class MyClass         


        
相关标签:
3条回答
  • 2020-12-11 01:08

    There is. Use Source menu->Generate Delegate Methods...

    0 讨论(0)
  • 2020-12-11 01:10

    I'll say a bit more about how the "Generate Delegate Methods" refactoring works to create a forwarding class like you describe.

    You make a new class which optionally implements the interface, and provide it with a field with the type you want to delgate, e.g.:

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

    Then you apply the eclipse refactoring. (Cmd-3 deleg... is an easy way to access it.) Select the checkbox for the new field. All of its methods will be added as delegates.

    (There is a bug, I think, in the refactoring for Eclipse oxygen, where it will copy the default keyword from methods with that keyword on the interface. You may need to delete that keyword.)

    So for a delegate to a List the refactoring produced:

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

    and so on...

    0 讨论(0)
  • 2020-12-11 01:16

    Tested in Luna.

    Use shortcut Alt-Shift-S, M 2 times. Press Enter

    0 讨论(0)
提交回复
热议问题