我想创建一个实现接口Titi的类Toto。常见的方法是:
public class Toto implements Titi
问题是我正在自动生成Toto类,并且每次添加实现Titi都是不切实际的。有没有办法让它在Java EE 6中实现接口。(比如AOP) 请给我一个例子
答案 0 :(得分:2)
你有几个解决方案。在不了解代码生成的本质的情况下,除了一般性之外,很难提供帮助。不过,AOP似乎有点过头了。
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更通用。