我有一个Map<Object,Object>
,其中包含String作为键,Double作为值
要提取双值,我会做((Number)en.getValue()).doubleValue()
但是,出于显而易见的原因,我想做防御性编程以检查该值是否真的是Double
我怎么做到这一点?
instanceOf不是解决方案 - 因为在这种情况下它似乎不能识别固有的双重。
答案 0 :(得分:1)
简单地说:
Object o = en.getValue();
if (o instanceof Number) {
// do something with ((Number)o).doubleValue();
} else {
// not a double
}
这适用于:
如果您想确保只处理Double,请将instanceof check更改为Double而不是Number。
如果你仍觉得instanceof不是答案,你能解释一下原因吗?
答案 1 :(得分:0)
这样的事情可以提供帮助:
Class<? extends Object> className = obj.getClass();
if (className.getName().contains("Number")){
//check to see if Double
//add the object to the Map
}else {
//convert it to whatever and do error handling
}
答案 2 :(得分:-1)
与David类似,您可以选中Double比Number更具体。
需要注意的一点是Java Collections不支持基本类型对象。
Map<Object, Object> map = new HashMap<>();
map.put("one", new Integer(1));
map.put("two", new Double(2));
map.put("three", "3");
map.put("four", new Object());
// Find Double
for (Object key : map.keySet()) {
Object value = map.get(key);
if (value instanceof Double) {
System.out.println(key + ": " + value + " (Double)");
}
}