想创建一个map <string,=“”object =“”>,Object可以是String,也可以是类Object </string>

时间:2011-07-29 09:12:52

标签: java

如何创建Map<String , Object>

每次Object都是一个字符串时,在这个地图中。但是现在我想在对象中添加一个类。这是混合字符串和类对象的好方法吗?如果是,当我遍历地图时,我如何在类和字符串之间进行区分?

3 个答案:

答案 0 :(得分:10)

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");
    }
}

答案 1 :(得分:2)

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());
    }
}

答案 2 :(得分:0)

如果您在Map中有Object作为值,则可以将任何对象作为值添加为String,Integer,您的自定义类......

要在迭代时在类和字符串之间取消,可以使用instance of来检查它是否为字符串。

即:

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
    }
}