3

如果我放:

public CountryState CountryState.find(long id) {
        return (CountryState) findById(CountryState.class, id);
}

我正在 CountryState 类中创建一个方法 find 。

有没有办法在多个类中创建一个方法?我是否需要为要创建的每个类重复代码?

我知道通过方面我可以让一个类从另一个类继承,但是这样做,我可以创建一个超类,因为 java 不接受多重继承。

4

2 回答 2

5

这种“模式”就是您在 AspectJ 中的做法。

声明一个接口:

interface Holder {}

在接口上进行类型间声明:

public int Holder.getMeAnInt() {
  return 42;
}

当您在接口上进行这样的声明时,您将提供“默认实现”。所以接口现在将定义 getMeAnInt() 并且任何不实现 getMeAnInt() 的 Holder 实现都将获得默认实现。

难题的最后一块是使用声明父母来指定哪些类型实现您的接口:

declare parents: @Anno * implements Holder;

所以现在,任何使用 @Anno 注释的类型都将实现 Holder 并具有 getMeAnInt() 方法。

于 2010-09-22T19:16:24.620 回答
0

您实际上可以在不使用 AOP 的情况下解决它。你可以只使用 OOP/OOD。有两种方法(我假设你想写一次方法):

  1. 使用方法实现创建抽象基类并从中派生所有类。实际上,这不是最好的主意。

  2. 创建将实现您的 find() 方法并在类之间共享它的辅助类(使用依赖注入,或者只是通过紧密耦合它们)。

因此,如果我理解正确,您实际上想要的是一个通用方法,它将返回目标类的实例:

public <T> find(long id, T targetClassObject) {
  Class<? extends T> class = targetClassObject.getClass();
  // do something i.e. call target method via reflection
}
于 2010-09-17T20:56:41.510 回答