问题描述
我有以下界面(在kotlin中):
interface QueryRepository<T> {
fun findExpenses(filter: IFilter): Flux<T>
}
为了像弹簧数据一样仅使用接口,我想到了这个。首先,我创建一个扩展它的新接口,并提供类型(java):
public interface ExpenseQueryRepository extends QueryRepository<Expense> {
}
然后提供实现(java):
public class ExpenseQueryRepositoryImpl implements ExpenseQueryRepository {
private final FilterFactory<Query> filterFactory;
private final ReactiveMongoTemplate template;
@Autowired
public ExpenseQueryRepositoryImpl(FilterFactory<Query> filterFactory,ReactiveMongoTemplate template) {
this.filterFactory = filterFactory;
this.template = template;
}
@Override
public Flux<Expense> findExpenses(IFilter filter) {
var documentFilter = filterFactory.transformFilters(filter,Expense.class);
return template.find(documentFilter,Expense.class);
}
}
现在我可以用我的实现和spring数据的实现创建一个接口:
public interface ExpenseRepository extends ReactiveMongoRepository<Expense,String>,ExpenseQueryRepository {
}
这有效。但是,在ExpenseQueryRepository中,代码可以重复使用,只需要一个不同的类即可。我不能仅通过类型定义获得它。 Kotlin的reified类型不是这里的选项-否则我无法正确使用它。 所以我的问题是,有没有一种方法可以以一种通用的方式提供实现,而最终只能定义:
public interface ExpenseRepository extends ReactiveMongoRepository<Expense,QueryRepository<Expense> { }
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)