How to get values from a Map with different value types? (Java)

前端 未结 3 1578
故里飘歌
故里飘歌 2021-01-28 20:41

I have a utility function that returns Map, but that Map always has this structure:

{ \"a\": , \"b\"         


        
相关标签:
3条回答
  • 2021-01-28 21:00

    Basically whenever I reach this point of storing with a HashMap or any map for that sort. I tend to go ahead and cast it. Take for example I have a class named Module that I am getting the value of and the key is the module name. I would go (Module) map.get(modName);

    0 讨论(0)
  • 2021-01-28 21:15

    You need to cast the Object retrieved from Map to the type you required:

    Type1 type1obj = (Type1) data.get("a");
    

    But with the code above you have to make sure the type of value associated with key "a" is Type1, otherwise a ClassCastException will thrown at runtime.

    If you cannot guarantee the type of the Object retrieved, you can check it like:

    Object obj = data.get("a");
    Type1 type1obj;
    if(obj instanceof Type1) {
        type1obj = (Type1) obj;
    } else {
        //to print error log or do some workaround
    }
    
    0 讨论(0)
  • 2021-01-28 21:15

    Ultimately, because your map has Object as its value type, you need to cast, but you can hide this with a typed utility method:

    @SuppressWarnings("unchecked")
    public static <T> T get(Map<String, Object> map, String key) {
        return (T)map.get(key);
    }
    

    So then due to java's type inference this will compile:

    Type1 type1obj = get(data, "a");
    

    Adding @SuppressWarnings("unchecked") stops your IDE/compiler complaining about an "unsafe cast".

    0 讨论(0)
提交回复
热议问题