首页 > 解决方案 > 如何从 Map 中获取对象值?

问题描述

Map<String, Object> subSource2 = (Map<String, Object>)departmentPHSSuportEmail.get("SubSource");
List<Map<String , Object>> myMap2  = (List<Map<String , Object>>)subSource2.get("value");
Map<String,Object> subSourceMap3 = myMap2.get(0);
String value = (String)subSourceMap3.get("value");

在这里,我不会将值指定为String. 它可以是任何类型。因此,当我将其转换为字符串时,String应该只接受值,并且不能接受其他数据类型。那么有没有办法改变下面的代码?

String value = (String)subSourceMap3.get("value");

到另一个接受所有其他数据类型。

标签: java

解决方案


如果您可以在 Map 中拥有与该键关联的任何类型,并且只希望String将值转换为String,则需要在转换之前检查类型:

Object rawValue = subSourceMap3.get("value");
if (rawValue instanceof String) {
    String value = (String) rawValue;
    // do what you want with the String value
} else if (rawValue instanceof Long) { // or whatever else
    // cast to Long
} else {
    // throw an exception for unknown types or do nothing
}

但是,如果您的代码只能处理字符串表示,您可以只调用上面.toString()的代码rawValue(除非它是null!)而不关心它的实际类型。


推荐阅读