java给ParamMap<String, ?>的value赋值,put String类型报错,说required: ?,泛型不是方便用各种类型吗

如下excel_data 变量的类型是List<ParamMap<String, ?>>:
public static List<ParamMap<String, ?>> excel_data = ExcelMapProvider .getTableData("test_data/data_prepare/genSku.xls");

ParamMap类是继承HashMap:ParamMap<String, T> extends HashMap<String, T> {...}

问题:实际excel_data是从excel获取的对象,实际只有1行,所以只有0一个索引,现在想给excel_data增加1个key是"timestamp",赋值为String类型如下,
String timestamp = Long.toString(System.currentTimeMillis());excel_data.get(0).put("timestamp",timestamp);

编译报错,如截图,请大神帮忙解答,急,感谢。

第1个回答  2020-01-10
你泛型基础没学好,通配符它分三种意思!
? 无界;
? extends Person 上界
? super Person 下界
无界:不能使用对象独有的方法
上界:不能使用put,add这些类似的操作;
下界:不能使用,get类似的操作;

比如你的:
public static List<ParamMap<String, ?>> excel_data =
ExcelMapProvider .getTableData("test_data/data_prepare/genSku.xls");
这个操作是绝对不允许的,因为你这个是无界;追问

哦,我的目的是要给ParamMap对象put个String value要怎么做啊

追答

你要单纯的put的没别的需求,就用下界,就可以了!

本回答被网友采纳
第2个回答  2020-01-10
在Java集合框架中,对于参数值是未知类型的容器类,只能读取其中元素,不能向其中添加元素, 因为,其类型是未知,所以编译器无法识别添加元素的类型和容器的类型是否兼容,唯一的例外是NULL
你这个可以put进去个null,但是不能放其他任何类型的值
相似回答