我正在使用 Jackson 反序列化 JSON 有效负载。我有一些字段可以是对象或对象数组。所以在我的Java代码中我声明
class Outer{
private Object inner;
}
我知道内在可以是Map<String,String>
or List<Map<String,String>>
因为我需要对这个内部对象做一些工作,所以我必须驻留在 if - 实例
if (inner instanceof List){
List<Map<String,String>> innerAsList = (List<Map<String,String>>)inner;
...
}else if (inner instanceof Map){
Map<String,String> innerAsMap = (Map<String,String>)inner;
...
}else{
throw new IllegalArgumentException("List or Map only");
}
现在尝试使用“新”模式匹配instanceof
无法编译(我使用的是启用预览的 JDK 17)
if (inner instanceof List<Map<String,String>> innerAsList){
...
}else if (inner instanceof Map<String,String> innerAsMap){
...
}else{
throw new IllegalArgumentException("List or Map only");
}
编译失败
'Object' cannot be safely cast to 'List<String>'
使用通配符强制转换编译
if (inner instanceof List<?> innerAsList){
...
}else if (inner instanceof Map<?,?> innerAsMap){
...
}else{
throw new IllegalArgumentException("List or Map only");
}
但我仍然需要转换为正确的泛型。
这可以以某种方式解决吗?它是否缺少功能?如果是,是否计划在未来版本中添加它?