【发布时间】:2017-07-28 09:35:54
【问题描述】:
我有一个Map <String,Object> 的数组映射。 Object 将是一个简单类型(String、Integer、Boolean、...)。
我正在尝试做类似的事情
Boolean isSet = (Boolean) metaMap.get("is_set");
if (isSet) ...
metaMap.get("is_set")可能没有设置,所以可以返回null;或者它已设置但它可能正在使用0/1 true/false 或"true"/"false"。
如何将所有这些情况转换为布尔值?
我意识到有使用instanceof 的if/else 解决方案。我想知道是否有更简单的解决方案。
【问题讨论】:
-
这听起来像是XY Problem。听起来您真的应该使用带有字段的专用类而不是
Map。 -
如果它真的可以编码为
0/1和"true"/"false",那么我认为你唯一的方法就是编写一些显式代码parseBooleanFromObject并在那里指定你真正的逻辑。或者可能是 4castle 是对的,而您正试图对更大的问题应用完全错误的(非 Java)解决方案。 -
注释:“字符串、整数、布尔值”是不是基本类型
-
评论 2:如果你这样做:
Boolean isSet = (Boolean) metaMap.get("is_set");和is_set是null(在metaMap到null中设置或不在metaMap中) - 你会得到NPE。