我不确定是否可以使用Java 8 lamda表达式将泛型方法编写为函数编程,如下所示
泛型方法
public <T> MongoCollection<T> getCollection(String collectionName, Class<T> typeParameterClass) {
return mongoClient
.getDatabase(mongodbConfiguration.getDatabase())
.getCollection(collectionName, typeParameterClass);
}我想将此泛型方法转换为泛型函数lamda表达式,如下所示
public BiFunction<String, Class<T>, T> getCollection = (collectionName, typeParameterClass) -> {
return mongoClient
.getDatabase(mongodbConfiguration.getDatabase())
.getCollection(collectionName, typeParameterClass);
};从上面的代码中,我对T和typeParameterClass类型有一个错误

更新1
在实现@Clashsoft建议的方法时,第二个讨论是Class<Object>而不是Class<T>
repository.getCollectionFactory().apply("", Category.class);

发布于 2021-02-19 10:39:15
BiFunction错误的第三种类型(结果类型)应该是MongoCollection<T>
public BiFunction<String, Class<T>, MongoCollection<T>> getCollection = (name, type) ->
mongoClient
.getDatabase(mongodbConfiguration.getDatabase())
.getCollection(name, type);还要注意,T必须是类泛型参数,只要getCollection不再是一个方法,而是一个字段。
public class ClassHavingGetCollectionField<T> {
...
}..。否则,您需要定义一个泛型类型返回此类功能接口实现的方法:
public <T> BiFunction<String, Class<T>, MongoCollection<T>> getCollectionBiFunction() {
return (name, type) ->
mongoClient
.getDatabase(mongodbConfiguration.getDatabase())
.getCollection(name, type);
}https://stackoverflow.com/questions/66274803
复制相似问题