在Java中列出mongoDB的数据库时对forEach的引用不明确

zpgglvta  于 2022-12-22  发布在  Go
关注(0)|答案(3)|浏览(134)

我将按照此guide尝试设置mongoDB数据库。

mongoClient.listDatabaseNames().forEach(System.out::println);

getDatabaseNames()已弃用并被替换。
但是,该行给出以下错误:

error: reference to forEach is ambiguous
    mongoClient.listDatabaseNames().forEach(System.out::println);
                                   ^
  both method forEach(Consumer<? super T>) in Iterable and method forEach(Block<? super TResult>) in MongoIterable match
  where T,TResult are type-variables:
    T extends Object declared in interface Iterable
    TResult extends Object declared in interface MongoIterable

文档声明listDatabaseNames()返回一个ListDatabasesIterable,为什么我不能迭代这个列表?

1aaf6o9v

1aaf6o9v1#

可以通过强制转换为Consumer<String>来帮助编译器解决多义性问题

mongoClient.listDatabaseNames()
           .forEach((Consumer<String>) System.out::println);
zz2j4svz

zz2j4svz2#

listDatabaseNames()公开了不同的forEach方法。一个方法可以接收Block<? super String> block作为参数,另一个方法接收Consumer<? super String> consumer。为了避免这种不明确性,您需要根据需要强制转换。

mongoClient1.listDatabaseNames()
              .forEach((Block<String>) System.out::println);

here还有一个未决问题

vlurs2pr

vlurs2pr3#

这种模糊性可以通过强制转换为(Consumer<? super String>)来解决

mongoClient.listDatabaseNames()
       .forEach((Consumer<? super String>)  name -> System.out.println(name));

相关问题