2011-07-29 31 views
2

如何創建一個Map<String , Object>想要創建一個映射<String,Object>,Object可以是String並且可以是類Object

在此映射中,每次對象都是一個字符串。但是現在我想在這個對象中加入一個類。這是混合字符串和類對象的好方法嗎?如果是的話,當我遍歷地圖時,我如何在類和字符串之間進行區分?

+0

可以使用如果(對象的instanceof java.lang.String中)類和字符串之間distiguish。 – nidhin

+0

你想達到什麼目標並不十分清楚。你的問題建議一個Map,其中鍵是String,值是Object。這是一種常見而正確的方式,但我不確定這是什麼意思。也許顯示一些示例代碼來闡明你的意圖。 –

回答

7
Map<String, Object> map = new HashMap<String, Object>(); 
... 
for (Map.Entry<String, Object> entry : map.entrySet()) { 
    if (entry.getValue() instanceof String) { 
     // Do something with entry.getKey() and entry.getValue() 
    } else if (entry.getValue() instanceof Class) { 
     // Do something else with entry.getKey() and entry.getValue() 
    } else { 
     throw new IllegalStateException("Expecting either String or Class as entry value"); 
    } 
} 
0

你有Object如地圖,你可以添加任何對象作爲值作爲字符串,整數,你的自定義類的值...

雖然迭代,你可以使用instance of檢查類和字符串之間distiguish無論是否是String。

即:

Set<String> mapKeys = myMap.keySet(); 
for (String key : mapKeys) { 
    Object value = myMap.get(key); 
    if (value instanceof String) { 
     //value is of type String 
    } else if (value instanceof MyClass) { 
     //value is of type MyClass 
    } 
} 
0

每一個對象(不包括接口)在Java擴展Object,所以你的做法是正確的。

要知道對象是字符串還是其他對象類型,請使用instanceof關鍵字。

實施例:

Map<String, Object> objectMap = ....; 

for (String key : objectMap.keySet()) { 
    Object value = objectMap.get(key); 
    if (value instanceof String) { 
     System.out.println((String) value); 
    } else if (value instanceof Class) { 
     System.out.println("Class: " + ((Class)value).getName()); 
    } 
} 
相關問題