提问者:小点点

Java抛出类强制转换异常,即使类型是正确的


我在Spring启动时学习了矩阵变量,但在提取数据时遇到了问题。

@GetMapping(value = "/{query}/plan", produces = {"application/xml"})
   public ResponseEntity<List<PlanDTO>> fetchPlansByLocalRate(@MatrixVariable(pathVar = "query") Map<String, List<Integer>> map){
       
       Set<String> keysLocalRates = map.keySet();
       Set<Integer> localRates = new HashSet<Integer>();
       
       keysLocalRates.forEach(key -> {
           map.get(key).forEach(val -> localRates.add(val)); // throwing exception here
       });
       
       return ResponseEntity.status(HttpStatus.OK).body(planService.fetchPlansByLocalRate(localRates));
       
   }

它抛出以下错误

java. lang.ClassCastException:类java.lang.String不能强制转换为类java.lang.Integer(java.lang.String和java.lang.Integer在加载器'bootstrap'的模块java.base中)在java.base/java.util.ArrayList.for每(ArrayList.java:1511)~[na:na]在com.inery.控制器.PlanController.lambda0美元(PlanController.java:51)~[类/:na]在java.base/java.util.LinkedHashMap$LinkedKeySet.for每(LinkedHashMap.java:589)~[na:na]在com.inrey.控制器.PlanController.fetchPlansByLocalrate(PlanController.java:50)~[类/:na]在java.base/jdk.interal.反射.NativeMEodAccessorImp.调用0(本机方法)~[na:na]在java.base/jdk.interal.反射.NativeMEodAccect

我不明白我哪里出错了。


共1个答案

匿名用户

keysLocalRates是一组字符串。localRates是一组整数。您正在尝试将StringkeysLocalRates添加到localRatesIntegerString不是兼容的类型。您需要使用相同的类型或从一种类型转换为另一种类型。我不知道String集是否包含始终是数字的字符串。如果没有,那么您可能希望将String用于两个集合。