从Java 8迁移到Java 11时方法引用出现问题

从Java 8迁移到Java 11时方法引用出现问题,java,java-11,method-reference,Java,Java 11,Method Reference,我试图将一些使用Java 8 libs的旧应用程序迁移到Java 11,但使用方法引用的代码出现了一些奇怪的情况: Error:(26, 46) java: incompatible types: cannot infer type-variable(s) R (argument mismatch; invalid method reference unexpected static method getId(com.mongodb.BasicDBObject) found

我试图将一些使用Java 8 libs的旧应用程序迁移到Java 11,但使用方法引用的代码出现了一些奇怪的情况:

Error:(26, 46) java: incompatible types: cannot infer type-variable(s) R
    (argument mismatch; invalid method reference
      unexpected static method getId(com.mongodb.BasicDBObject) found in unbound lookup)
场景如下所示:

myollib.java(在Java8项目中)

公共类myollib{
公共静态字符串getId(BasicDBObject o){return o.getString(“id”);}
}
MyMigratingApplication.java(在java 11项目上)

公共类MyMigratingApplication{
公共静态void main(字符串[]args){
List myList=getdatafromwhere();
List myIdList=myList.stream().map(myollib::getId).collect(Collectors.toList());
//...
}
}
按原样使用方法引用不起作用,但如果我使用lambda或封装
getId
方法,它确实起作用:

使用lambda:

公共类MyMigratingApplication{
公共静态void main(字符串[]args){
List myList=getdatafromwhere();
List myIdList=myList.stream().map(data->myollib.getId(data)).collect(collector.toList());
//...
}
}
封装:

公共类MyMigratingApplication{
静态字符串getId(基本CDBObObject数据){
返回myollib.getId(数据)
}
公共静态void main(字符串[]args){
List myList=getdatafromwhere();
List myIdList=myList.stream().map(MyMigratingApplication::getId).collect(Collectors.toList());
//...
}
}
为什么会这样?有没有什么解决方案可以最小化代码重构需求

一些传统信息:

1) MongoDB版本在两个项目上都是相同的,即3.6.4

2) 当我尝试在IntelliJ IDE上运行应用程序时会发生这种情况


3) 我使用Maven作为依赖项管理器。

它在JDK-13上运行良好。您正在使用哪个版本的
IntelliJ
?这样封装块下的代码将无法工作MyMigratingApplication::getId(data),您可以将其更改为MyMigratingApplication::getId我正在使用IntelliJ Ultimate 2019.2.3 IDEA是否使用Java 8预构建的旧项目?您是否尝试过使用File->Invalidate caches?maven clean compile是否也会出现同样的错误?