如果我放:
public CountryState CountryState.find(long id) {
return (CountryState) findById(CountryState.class, id);
}
我正在 CountryState 类中创建一个方法 find 。
有没有办法在多个类中创建一个方法?我是否需要为要创建的每个类重复代码?
我知道通过方面我可以让一个类从另一个类继承,但是这样做,我可以创建一个超类,因为 java 不接受多重继承。
这种“模式”就是您在 AspectJ 中的做法。
声明一个接口:
interface Holder {}
在接口上进行类型间声明:
public int Holder.getMeAnInt() {
return 42;
}
当您在接口上进行这样的声明时,您将提供“默认实现”。所以接口现在将定义 getMeAnInt() 并且任何不实现 getMeAnInt() 的 Holder 实现都将获得默认实现。
难题的最后一块是使用声明父母来指定哪些类型实现您的接口:
declare parents: @Anno * implements Holder;
所以现在,任何使用 @Anno 注释的类型都将实现 Holder 并具有 getMeAnInt() 方法。
您实际上可以在不使用 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
}