以下代码正常运行,但我希望它具有通用样式。 我尝试用通用的方式编写它,但是我遇到了一些问题。 我有一个方法是从MongoDB的两个集合中获取一些数据。
我使用MongoOperations
中的package org.springframework.data.mongodb.core
来处理MongoDB操作。我调用的方法find
需要参数:query,以及Mongo Collection所构成的类。类EvaluationWork
和ArchivalWork
实现了接口WorkContainer
。
我想要做的是使用T
泛型参数(由WorkContainer
限制上限),通过make find
方法调用,而不是如果可能,EvaluationWork.class
和ArchivalWork.class
。我也很好奇是否可以使函数convertToWorkWithId
具有通用性,并且可以像现在一样调用它,而不需要强制转换(.map(w->convertToWorkWithId((T)w))
)?
public abstract class AbstractWorkMongoDao<T extends WorkContainer> {
protected WorkWithId convertToWorkWithId(WorkContainer evaluationWork) {
return evaluationWork.getWorkWithId();
}
/* there is some code here */
public List<WorkWithId> getByDate(String institutionId, String startDate, String endDate, boolean repository) {
Query query = buildSearchQuery(institutionId, startDate, endDate);
List<WorkWithId> workWithIds = mongoOperations.find(query, EvaluationWork.class)
.stream()
.map(this::convertToWorkWithId)
.collect(Collectors.toList());
if(repository){
workWithIds.addAll(mongoOperations.find(query, ArchivalWork.class)
.stream()
.map(this::convertToWorkWithId)
.collect(Collectors.toList())
);
}
return workWithIds;
}
}