Hashmap
包含一个值为Integer
或Double
的键。
如果值为Double
类型但对类型Integer
失败,则此方法有效:
Double value = (Double) locationMap.get("key");
不幸的是我似乎无法控制类型,因为它是从服务器传输的JSON数据。显然,即使数字在传输之前是double
服务器端(Javascript)类型,但没有十进制数字,它将在客户端(Java)的某个位置解释为Integer
。
什么是考虑可能的Integer
值并将其投射到Double
的最短路径?
假设你知道它是Number
(例如你先用instanceof
测试过):
Double value = ((Number) locationMap.get("key")).doubleValue();
如果数字已经是Double
,这是低效的。您可能想要定义一个特殊处理方法:
// Doesn't handle null.
Double toDouble(Number n) {
return (n instanceof Double) ? (Double) n : Double.valueOf(n.doubleValue());
}
Double.valueOf
看起来多余,但如果使用条件表达式来避免第二个操作数(see this)的拆箱,则是必要的。