无法从Map <String,Object>强制转换为Map <String,List <Map <String,String >>>

Jac*_*kie 2 java generics casting

我正在升级以下代码:

return this.getMethod().execute(mp);
Run Code Online (Sandbox Code Playgroud)

execute方法有签名的地方:

public Map<String,Object> execute(Object mp)
Run Code Online (Sandbox Code Playgroud)

我有代码需要返回方法Map<String, List<Map<String, String>>>,但编译器阻塞了转换.我可以/如何正确地进行演员?Java 5和6之间是否存在任何变化,这会使现在成为编译时问题?

Pau*_*ora 5

只要您确定返回的地图只包含类型的值List<Map<String, String>>,那么您需要使用双重转换:

Map<String, Object> map = this.getMethod().execute(mp);
@SuppressWarnings("unchecked") //thoroughly explain why it's okay here
Map<String, List<Map<String, String>>> mapWithNarrowedTypes =
        (Map<String, List<Map<String, String>>>)(Map<?, ?>)map;
return mapWithNarrowedTypes;
Run Code Online (Sandbox Code Playgroud)