使用Java实现多个接口 - 有一种委托方式吗?

时间:2010-12-28 14:36:41

标签: java interface delegation

我需要创建一个基类来实现几个带有大量方法的接口,例如下面的例子。

是否有更简单的方法来委派这些方法调用而无需创建大量重复方法?

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. */

}

4 个答案:

答案 0 :(得分:78)

如上所述,没有办法。但是,有点像IDE可以自动生成委托方法。例如Eclipse可以做到。首先设置一个模板:

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

然后右键单击,选择 Source>生成委派方法并勾选if1if2字段,然后点击确定

另见以下屏幕:

alt text


alt text


alt text

答案 1 :(得分:6)

实现多个界面有一种方法。

只需从另一个接口扩展一个接口或创建扩展预定义接口的接口 例如:

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

现在我们有扩展另一个接口的接口,以便在out类中使用这个实现两个或更多接口的新接口

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() {

    }
}

希望这会有所帮助

答案 2 :(得分:5)

不幸的是:没有。

我们都急切地等待extension methods

的Java支持

答案 3 :(得分:0)

没有好办法。您可以使用具有目标方法的处理程序的代理,并将其他所有内容委托给它们。当然,你必须使用工厂,因为没有构造函数。