首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用java.util.Function作为函数编程的泛型方法

用java.util.Function作为函数编程的泛型方法
EN

Stack Overflow用户
提问于 2021-02-19 09:20:31
回答 2查看 188关注 0票数 2

我不确定是否可以使用Java 8 lamda表达式将泛型方法编写为函数编程,如下所示

泛型方法

代码语言:javascript
复制
public <T> MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass) {
    return mongoClient
            .getDatabase(mongodbConfiguration.getDatabase())
            .getCollection(collectionName, typeParameterClass);
}

我想将此泛型方法转换为泛型函数lamda表达式,如下所示

代码语言:javascript
复制
public BiFunction<String, Class<T>, T> getCollection = (collectionName, typeParameterClass) -> {
    return mongoClient
            .getDatabase(mongodbConfiguration.getDatabase())
            .getCollection(collectionName, typeParameterClass);
};

从上面的代码中,我对TtypeParameterClass类型有一个错误

更新1

在实现@Clashsoft建议的方法时,第二个讨论是Class<Object>而不是Class<T>

代码语言:javascript
复制
repository.getCollectionFactory().apply("", Category.class);

EN

Stack Overflow用户

发布于 2021-02-19 10:39:15

BiFunction错误的第三种类型(结果类型)应该是MongoCollection<T>

代码语言:javascript
复制
public BiFunction<String, Class<T>, MongoCollection<T>> getCollection = (name, type) -> 
    mongoClient
        .getDatabase(mongodbConfiguration.getDatabase())
        .getCollection(name, type);

还要注意,T必须是类泛型参数,只要getCollection不再是一个方法,而是一个字段。

代码语言:javascript
复制
public class ClassHavingGetCollectionField<T> {
   ...
}

..。否则,您需要定义一个泛型类型返回此类功能接口实现的方法:

代码语言:javascript
复制
public <T> BiFunction<String, Class<T>, MongoCollection<T>> getCollectionBiFunction() {
    return (name, type) ->
         mongoClient
             .getDatabase(mongodbConfiguration.getDatabase())
             .getCollection(name, type);
}
票数 1
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66274803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档