Implementing multiple interfaces with Java - is there a way to delegate?

255,777

Solution 1

As said, there's no way. However, a bit decent IDE can autogenerate delegate methods. For example Eclipse can do. First setup a template:

public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {
    private InterFaceOne if1;
    private InterFaceTwo if2;
}

then rightclick, choose Source > Generate Delegate Methods and tick the both if1 and if2 fields and click OK.

See also the following screens:

alt text


alt text


alt text

Solution 2

There is one way to implement multiple interface.

Just extend one interface from another or create interface that extends predefined interface Ex:

public interface PlnRow_CallBack extends OnDateSetListener {
    public void Plan_Removed();
    public BaseDB getDB();
}

now we have interface that extends another interface to use in out class just use this new interface who implements two or more interfaces

public class Calculator extends FragmentActivity implements PlnRow_CallBack {

    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {

    }

    @Override
    public void Plan_Removed() {

    }

    @Override
    public BaseDB getDB() {

    }
}

hope this helps

Solution 3

Unfortunately: NO.

We're all eagerly awaiting the Java support for extension methods

Share:
255,777
Chuck Mosher
Author by

Chuck Mosher

Research geophysicist and programmer. A Java convert after 30 years of assembler, C, and Fortran.

Updated on February 08, 2020

Comments

  • Chuck Mosher
    Chuck Mosher over 4 years

    I need to create a base class that implements several interfaces with lots of methods, example below.

    Is there an easier way to delegate these method calls without having to create a horde of duplicate methods?

    public class MultipleInterfaces implements InterFaceOne, InterFaceTwo {
    
        private InterFaceOne if1;
        private InterFaceTwo if2;
    
        public MultipleInterfaces() {
          if1 = new ImplementingClassOne();
          if2 = new ImplementingClassTwo();
        }
    
        @Override
        public void classOneMethodOne { if1.methodOne(); }
        @Override
        public void classOneMethodTwo { if1.methodTwo(); }
        /** Etc. */
    
    
        @Override
        public void classTwoMethodOne { if2.methodOne(); }
        @Override
        public void classTwoMethodTwo { if2.methodTwo(); }
        /** Etc. */
    
    }
    
  • Chuck Mosher
    Chuck Mosher over 13 years
    Thanks to BalusC and Lukas for such quick and useful answers. My project is based in Eclipse, so I was able to use BalusC's answer in near real-time ! Worked like a charm, and saved me several hours of frustrating work. As a new user of this forum, I am suprised and delighted at the quality of the participants here.
  • Lukas Eder
    Lukas Eder over 13 years
    Great hint! I didn't know that and will save 100's of hours in the future :) The good thing about stackoverflow: you'll also learn from questions you didn't ask yourself!