你会如何使它通用?

时间:2016-04-19 09:46:02

标签: java mongodb generics polymorphism

以下代码正常运行,但我希望它具有通用样式。 我尝试用通用的方式编写它,但是我遇到了一些问题。 我有一个方法是从MongoDB的两个集合中获取一些数据。

我使用MongoOperations中的package org.springframework.data.mongodb.core来处理MongoDB操作。我调用的方法find需要参数:query,以及Mongo Collection所构成的类。类EvaluationWorkArchivalWork实现了接口WorkContainer

我想要做的是使用T泛型参数(由WorkContainer限制上限),通过make find方法调用,而不是如果可能,EvaluationWork.classArchivalWork.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;
    }
}

0 个答案:

没有答案