我正在运行时遇到问题来编译这段代码这给我一个错误,即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;
}
答案 0 :(得分:4)
您可以执行以下操作,但我建议您使用Generics。
x = ((Integer) listabc.get(0) * 100 / total);
如果您使用过如下的Generics,则不需要任何演员。
List<Integer> listabc
HashMap<String, Integer> hashmap
x = listabc.get(0) * 100 / total;
在这种情况下,你不需要任何铸造。引入Integer,Double等包装类的原因之一是避免强制转换。
答案 1 :(得分:3)
您的代码稍有变化即可获得成功:
x = (double) listabc.get(0)*100/total;
Integer和Double不兼容,但int和double兼容扩展。在当前代码中,表达式的右侧(RHS)将自动升级为整数,然后您将该结果的强制转换指定为Double
。这次演员失败了。
通过指定扩展转化,Integer
结果将取消装箱到int
,然后转换为double
。最后这一行:
return x;
将x
的值加到Double
中,并将其作为方法的结果返回。
答案 2 :(得分:0)
首先,您不应该使用泛型HashMap
,因为编译器无法帮助您处理类型。尝试声明以下内容:
HashMap<String, Integer> hashmap = new HashMap();
我不建议存储具有不同值的类型的HashMap,因为它只会引发编程错误。此外,无需将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)