0
点赞
收藏
分享

微信扫一扫

IDEA/MAVEN编译错误:不兼容的类型,推断类型不符合上限

我们知道,Map

IDEA在build项目或用maven构建时,出现错误→不兼容的类型: 推断类型不符合上限

Error:(285, 67) java: 不兼容的类型: 推断类型不符合上限
推断: java.util.Map<? extends java.lang.Object,? extends java.lang.Object>
上限: java.util.Map<java.lang.String,com.emax.channel.OrderDTO>,java.lang.Object

对应的代码如下

1 Map<String, OrderDTO> executeResult = transactionTemplate.execute(transactionStatus -> {
2 boolean commonSaveResult;
3 // ......logic code here......
4 commonSaveResult = orderManager.save(order);
5 if (!commonSaveResult) {
6 log.warn("结算单号:{}结算主单落库失败,触发事务回滚", order.getTransferNo());
7 transactionStatus.setRollbackOnly();
8 return new HashMap<>();
9 }
10
11 Map<String, OrderDTO> map = new HashMap<>();
12 // ......logic code here......
13 return map;
14 });

 

原因分析

错误标记在第1行。但其实原因是第8行返回的 new HashMap<>()。我们知道,Map<K,V> / HashMap<K,V>是java.util包里的泛型类,new HashMap<>等价于new HashMap<Object, Object>, 而外层接收的是 Map<String, OrderDTO>。 出现类型不一致,jre又无法推断出来,所以就报错了。

 

解决办法有二

办法一:既然IDE(JRE)推断不出来,那我们就明确泛型的类型。即:将上面第8行代码改为 return new HashMap<String, OrderDTO>();

办法二:升级jdk版本。上面的build报错,我的项目JDK版本是1.8.0_40。升级到1.8.0_241后,这个问题就没有了, 高版本的JRE已经可以推断出来这个类型转换了。

 

IDEA/MAVEN编译错误:不兼容的类型,推断类型不符合上限_类型转换

  

IDEA/MAVEN编译错误:不兼容的类型,推断类型不符合上限_java_02

 

IDEA/MAVEN编译错误:不兼容的类型,推断类型不符合上限_不兼容_03

  

IDEA/MAVEN编译错误:不兼容的类型,推断类型不符合上限_java_04

 

当看到一些不好的代码时,会发现我还算优秀;当看到优秀的代码时,也才意识到持续学习的重要!--​​buguge​​



举报

相关推荐

0 条评论