66

我需要创建一个基类来实现具有许多方法的多个接口,例如下面的示例。

有没有更简单的方法来委派这些方法调用而不必创建大量重复的方法?

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

4 回答 4

79

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

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

然后右键单击,选择Source > Generate Delegate Methods并勾选这两个if1if2字段,然后单击OK

另请参阅以下屏幕:

替代文字


替代文字


替代文字

于 2010-12-28T14:47:44.023 回答
7

有一种方法可以实现多个接口。

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

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

    }
}

希望这可以帮助

于 2014-05-22T06:44:56.977 回答
5

很不幸的是,不行。

我们都在热切地等待 Java 对扩展方法的支持

于 2010-12-28T14:40:08.467 回答
0

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

于 2010-12-28T14:40:34.967 回答