【问题标题】:Implementing multiple interfaces with Java - is there a way to delegate?用 Java 实现多个接口 - 有没有办法委托?
【发布时间】:2011-05-31 14:45:24
【问题描述】:

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

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

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

}

【问题讨论】:

    标签: java interface delegation


    【解决方案1】:

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

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

    然后右键单击,选择Source > Generate Delegate Methods并勾选if1和if2字段并点击OK。

    另请参阅以下屏幕:



    【讨论】:

    • 感谢 BalusC 和 Lukas 提供如此快速而有用的答案。我的项目基于 Eclipse,因此我能够近乎实时地使用 BalusC 的答案!工作就像一个魅力,并为我节省了几个小时令人沮丧的工作。作为这个论坛的新用户,我对这里参与者的质量感到惊讶和高兴。
    • 很好的提示!我不知道这一点,将来会节省 100 小时 :) stackoverflow 的好处:你也可以从你没有问过自己的问题中学习!
    【解决方案2】:

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

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

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

    希望对你有帮助

    【讨论】:

      【解决方案3】:

      不幸的是:没有。

      我们都在热切地等待对 extension methods 的 Java 支持

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多