如果我把:
public CountryState CountryState.find(long id) {
return (CountryState) findById(CountryState.class, id);
}
我正在CountryState类中创建一个方法find。
有没有办法在几个类中创建一个方法?我是否需要为我想要创建的每个类重复代码?
我知道使用方面我可以使一个类继承自另一个,但是,这样做,我可以创建一个超类,因为java不接受多重继承。
答案 0 :(得分:5)
这种“模式”是你在AspectJ中的表现方式。
声明一个接口:
interface Holder {}
在界面上进行交互式声明:
public int Holder.getMeAnInt() {
return 42;
}
当您在界面上进行类似声明时,您将提供“默认实现”。因此,接口现在将定义getMeAnInt(),并且任何未实现getMeAnnt()的Holder实现都将获得默认实现。
然后,最后一部分是使用声明父项来指定哪种类型实现您的界面:
declare parents: @Anno * implements Holder;
现在,任何使用@Anno注释的类型都将实现Holder并具有getMeAnInt()方法。
答案 1 :(得分:0)
您可以在不使用AOP的情况下实际解决问题。你可以使用OOP / OOD。有两种方法(我假设你想写一次方法):
使用方法实现创建抽象基类,并从中派生所有类。实际上,这不是最好的主意。
创建将实现find()方法并在类之间共享的辅助类(使用依赖注入,或者只是通过紧密耦合)。
因此,如果我理解正确,您实际需要的是一个泛型方法,它将返回目标类的实例:
public <T> find(long id, T targetClassObject) {
Class<? extends T> class = targetClassObject.getClass();
// do something i.e. call target method via reflection
}