我有一个方法,该方法采用一个Map,该Map的Key为String,而value为类型T的对象,T是可序列化的对象。
public <T extends Serializable> void set(String key, Map<String, T> fields) {
......
.......
}
当我尝试传递map地图时,它给出了错误的参数类型错误。我希望此方法采用通用对象,并且不想将其更改为set(String key, Map<String, Map<String, String>> fields)
Map<String, String> fieldmapL1 = new HashMap<>();
fieldmapL1.put("ABC", "XYZ");
Map<String, Map<String, String>> fieldmapL2 = new HashMap<>();
fieldmapL2.put("Key", fieldmapL1);
instance.set("key", fieldmapL2);
答案 0 :(得分:3)
您需要指出类型,您正在使用:
instance.<Map<String, String>>set("key", fieldmapL2);
然后将类型T
解析为String
。此外,这仅在正确instance
实例化的情况下才有效(您可以在实例化时将T
设置为String
,则不需要上面的行,也可以省略显式类型并使用解决方案)。
答案 1 :(得分:2)
您遇到的问题是您键入的内容不符合您的要求。正如@Pankaj在该主题的其他评论中所解释的那样,Map无法序列化,因此您对fieldmap2的定义不符合T的条件。更新映射的实例以正确使用实现了serializable的HashMap可以解决问题(又名intelliJ也不再警告) )
public static class Test{
public <T extends Serializable> void set(String key, Map<String, T> fields) {
}
}
public static void main(String[] args) {
HashMap<String, String> fieldMapL1 = new HashMap<>();
fieldMapL1.put("ABC", "XYZ");
Map<String, HashMap<String, String>> fieldmap2 = new HashMap<>();
fieldmap2.put("key", fieldMapL1);
Test test = new Test();
test.set("key", fieldmap2);
}