java.lang.ClassCastException: java.lang.Integer 不能转换为 java.lang.Double

Sau*_*abh 3 java arrays jakarta-ee

我在运行时遇到问题来编译这段代码,这向我抛出了一个错误,即 java.lang.Integer 无法转换为 Java.lang.Double。如果有人帮我更正此代码,我会非常高兴

 double x;

 public Double getMethod() {

     HashMap hashmap= new HashMap();

     hashmap = SumCal();

     List  listabc = (List) hashmap.get("abclist");
     int total=(Integer) hashmap.get("all_total");
     x = (Double) listabc.get(0)*100/total;
     return x;
    }
Run Code Online (Sandbox Code Playgroud)

Jay*_*han 5

您可以按照以下方式进行,但我建议您使用泛型

x = ((Integer) listabc.get(0) * 100 / total);
Run Code Online (Sandbox Code Playgroud)

如果您使用了下面的泛型,则不需要任何转换。

List<Integer> listabc 
HashMap<String, Integer> hashmap 
x = listabc.get(0) * 100 / total;
Run Code Online (Sandbox Code Playgroud)

在这种情况下,您不需要任何铸造。引入 Integer、Double 等包装类的原因之一是为了避免强制转换。


Per*_*ion 5

对代码稍作修改即可成功:

x = (double) listabc.get(0)*100/total;
Run Code Online (Sandbox Code Playgroud)

Integer 和 Double 不兼容强制转换,但 int 和 double 兼容扩展。在当前代码中,表达式的右侧 (RHS) 自动装箱为整数,然后将该结果指定为Double. 这次选角失败了。

通过指定扩展转换,Integer结果将被拆箱为int,然后转换为double。最后这一行:

return x;
Run Code Online (Sandbox Code Playgroud)

将 的值装箱x到 a 中Double并将其作为方法的结果返回。