创建一个实现接口的类,而不改变类代码

时间:2014-12-24 14:47:54

标签: java interface aop

我想创建一个实现接口Titi的类Toto。常见的方法是:

public class Toto implements Titi

问题是我正在自动生成Toto类,并且每次添加实现Titi都是不切实际的。有没有办法让它在Java EE 6中实现接口。(比如AOP) 请给我一个例子

1 个答案:

答案 0 :(得分:2)

你有几个解决方案。在不了解代码生成的本质的情况下,除了一般性之外,很难提供帮助。不过,AOP似乎有点过头了。

  1. 更改生成源的模板,或使用其源代码的功能
  2. 改变后代的来源。
  3. 在源中使用子类或复合。
  4. 1。如果可以,请更改模板。大多数生成器都知道它们生成的源可能不符合您的需要,并允许代码插入或签名修改。即使它不是超级简单,大多数都有模板,你甚至可以从类路径和重新包装中取出。

    2. 简单的搜索和替换可能会改变代码签名,您可以在生成的类的末尾填充您自己的实现。这应该集成到您的构建过程中。

    3。我的首选是将生成的类合并到您自己的类中,或者如果有意义的话将其子类化。这是超级,超级简单,只需要简单,自动化的更改。我也可以更改生成的类的名称。

    换句话说,您有一个类Toto,其中包含一些生成的方法,比如someMethod

    public class Toto {
        public void someMethod() { ... }
    }
    

    创建一个新的,命名良好的类,可以将其子类化,也可以分别合成:

    public class TotoSubclass extends Toto implements Titi {
        // Titi implementation
    }
    
    public class TotoComposite implements Titi {
        private Toto toto;
        public TotoComposite(Toto toto) { this.toto = toto; }
        // Titi implementation
        // Toto delegates, IDEs can generate.
    }
    

    对于某些类型的问题,我不会抱怨以这种方式扩展Toto,例如,对于DAO而言,仅仅强调其他功能可能是有意义的。在某些(大多数?)情况下,继承可能是一种痛苦,而合成可能更安全。 IDE可以生成委托方法,或者您可以使用字节码操作(例如,Lombok)来自动生成委托,但使用IDE更通用。