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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);

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

参考技术A 你泛型基础没学好,通配符它分三种意思!
? 无界;
? 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的没别的需求,就用下界,就可以了!

参考技术B 在Java集合框架中,对于参数值是未知类型的容器类,只能读取其中元素,不能向其中添加元素, 因为,其类型是未知,所以编译器无法识别添加元素的类型和容器的类型是否兼容,唯一的例外是NULL
你这个可以put进去个null,但是不能放其他任何类型的值

以上是关于java给ParamMap<String, ?>的value赋值,put String类型报错,说required: ?,泛型不是方便用各种类型吗的主要内容,如果未能解决你的问题,请参考以下文章

Spring JdbcTemplate 查询绑定list参数

Hutools之http工具类

发送短信

从request中传递过来的参数信息

list集合怎么转化成一个javaBean对象

动态获取当前时间,查询数据。