对象为双

时间:2016-04-26 16:36:01

标签: java

我有一个Map<Object,Object>,其中包含String作为键,Double作为值 要提取双值,我会做((Number)en.getValue()).doubleValue() 但是,出于显而易见的原因,我想做防御性编程以检查该值是否真的是Double 我怎么做到这一点?

instanceOf不是解决方案 - 因为在这种情况下它似乎不能识别固有的双重。

3 个答案:

答案 0 :(得分:1)

简单地说:

Object o = en.getValue();
if (o instanceof Number) {
  // do something with ((Number)o).doubleValue();
} else {
  // not a double
}

这适用于:

  • map.put(&#34; abc&#34;,new Double(12));
  • map.put(&#34; DEF&#34; 15); //盒装到Integer,这是一个数字
  • map.put(&#34; GHI&#34;,15.0d); //盒装为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)");
    }
}