3

我在运行时面临编译这段代码的问题,这给我一个错误,即 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;
    }
4

3 回答 3

5

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

x = ((Integer) listabc.get(0) * 100 / total);

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

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

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

于 2013-02-23T02:37:40.557 回答
3

您的代码稍作更改将获得成功:

x = (double) listabc.get(0)*100/total;

Integer 和 Double 不兼容,但 int 和 double 扩展兼容。在您当前的代码中,表达式的右侧(RHS)被自动装箱为一个整数,然后您将该结果指定为Double. 这个演员失败了。

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

return x;

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

于 2013-02-23T02:38:43.357 回答
0

首先,您不应该使用泛型HashMap,因为这样编译器就无法帮助您处理类型。尝试声明以下内容:

HashMap<String, Integer> hashmap = new HashMap();

我不建议存储不同值类型的 HashMap,因为它只会引发编程错误。此外,无需将 an 强制int转换为Double. 您可以执行以下任何操作:

x = listabc.get(0) * 100.0 / total; // multiply by a floating-point number

x = (double) listabc.get(0) * 100 / total; // cast with (double)
于 2013-02-23T02:34:53.860 回答