22

我必须创建几个代理,以添加例如日志记录。像这样的东西:

interface IMath {
    public int add(a, b);
}

class Math implements IMath {
    public int add(a, b) { return a + b; }
}

class MathWithLogs implements IMath {
    private IMath realMath;
    public int add(a, b) {
        Log.d("tag", "valueable info");
        return realMath.add(a, b);
    }
}

只要这些接口不是 20 种方法,一切都很好,我必须在其中添加一些东西。

我的问题是,有没有办法用一些 Eclipse 插件自动生成包装类?

或者,除非另有说明(如@Override),否则也许有一种方法可以使用注释来调用来自 realMath 的方法?

4

3 回答 3

30

右键单击任何源文件 (.java) 并导航到source -> Override/Implement Methods/Generate Delegate Methods.

第一个将粘贴即时界面的所有方法的主体。第二个将对对象的所有层次结构执行相同的操作(我猜,不确定)。希望这可以帮助。

于 2012-08-17T10:29:53.327 回答
11

是的,有一个名为“Generate Delegate Methods”的源代码生成器,它可以完全满足您的需求。

于 2012-08-17T10:22:32.937 回答
9

在阅读了其他答案后,我花了一段时间才弄清楚该怎么做。解决方案是:

  1. 创建实现所需接口的(最初为空的)包装类。确保在创建类时取消选中“继承的抽象方法”。
  2. 在您的新包装类中(由于缺少接口实现,此时将显示错误),创建一个类型等于所需接口的字段。
  3. 右键单击刚刚创建的字段并选择 Source -> Generate Delegate Methods。
  4. 检查您要创建的方法,然后单击确定。
  5. 最后,为该字段添加一个单参数构造函数或一个 setter 方法(它不会作为此过程的一部分自动生成)。
于 2015-05-19T21:19:17.200 回答