我有一個Map<Object,Object>
其中包含字符串作爲鍵和Double作爲值。
要提取double值,我會做一個((Number)en.getValue()).doubleValue()
。
但是,由於顯而易見的原因,我想做防禦性編程來檢查值是否真的是Double。
我將如何實現它?Object as Double
instanceOf不是解決方案 - 因爲它似乎沒有認識到在這種情況下的固有的兩倍。
我有一個Map<Object,Object>
其中包含字符串作爲鍵和Double作爲值。
要提取double值,我會做一個((Number)en.getValue()).doubleValue()
。
但是,由於顯而易見的原因,我想做防禦性編程來檢查值是否真的是Double。
我將如何實現它?Object as Double
instanceOf不是解決方案 - 因爲它似乎沒有認識到在這種情況下的固有的兩倍。
簡單地做:
Object o = en.getValue();
if (o instanceof Number) {
// do something with ((Number)o).doubleValue();
} else {
// not a double
}
這適用於:
如果您想確保只處理Double,那麼請將instanceof check更改爲Double而不是Number。
如果你仍然覺得instanceof不是答案,你能解釋爲什麼嗎?
中的雙打,我認爲他實際上是在對某個對象進行修改。如果這樣'instanceof'不會有太大的幫助 – Priyamal
是怎麼回事? instanceof適用於任何對象,如果主題是指定類型的實例或該類型的子類,則返回true。 –
與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)");
}
}
像這樣的東西可以幫助:
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
}
只需使用地圖<字符串,雙> – mariusz2108
即不使用'Object'是因爲它是在 – IUnknown
「_defensive programming_」和泛型傳遞一個選項不兼容。 –