AspectJ的.在多个类中创建内部类型方法

Joh*_*ler 3 java aop aspectj aspects

如果我把:

public CountryState CountryState.find(long id) {
        return (CountryState) findById(CountryState.class, id);
}
Run Code Online (Sandbox Code Playgroud)

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

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

我知道使用方面我可以使一个类继承自另一个,但是,这样做,我可以创建一个超类,因为java不接受多重继承.

小智 5

这种"模式"就是你在AspectJ中的表现.

声明一个接口:

interface Holder {}
Run Code Online (Sandbox Code Playgroud)

在接口上进行intertype声明:

public int Holder.getMeAnInt() {
  return 42;
}
Run Code Online (Sandbox Code Playgroud)

当您在界面上进行类似声明时,您将提供"默认实现".因此,接口现在将定义getMeAnInt(),并且未实现getMeAnnt()的任何Holder实现将获得默认实现.

然后,拼图的最后一部分是使用声明父项来指定哪个类型的组实现您的接口:

declare parents: @Anno * implements Holder;
Run Code Online (Sandbox Code Playgroud)

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