2016-04-26 44 views
0

我有一個Map<Object,Object>其中包含字符串作爲鍵和Double作爲值。
要提取double值,我會做一個((Number)en.getValue()).doubleValue()
但是,由於顯而易見的原因,我想做防禦性編程來檢查值是否真的是Double。
我將如何實現它?Object as Double

instanceOf不是解決方案 - 因爲它似乎沒有認識到在這種情況下的固有的兩倍。

+6

只需使用地圖<字符串,雙> – mariusz2108

+0

即不使用'Object'是因爲它是在 – IUnknown

+4

「_defensive programming_」和泛型傳遞一個選項不兼容。 –

回答

1

簡單地做:

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

這適用於:

  • map.put( 「ABC」,新的雙(12));
  • map.put(「def」,15); //盒裝到整數這是一個數字
  • map.put(「ghi」,15.0d); //盒裝爲Double,也是一個數字

如果您想確保只處理Double,那麼請將instanceof check更改爲Double而不是Number。

如果你仍然覺得instanceof不是答案,你能解釋爲什麼嗎?

+0

中的雙打,我認爲他實際上是在對某個對象進行修改。如果這樣'instanceof'不會有太大的幫助 – Priyamal

+0

是怎麼回事? instanceof適用於任何對象,如果主題是指定類型的實例或該類型的子類,則返回true。 –

-1

與David類似,您可以選擇Double,它比Number更具體。

有一點需要注意的是Java集合不僅僅支持基本類型對象。

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)"); 
    } 
} 
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 
} 
相關問題