简化代码测试如下:
public class Test {
public static void main(String[] args) {
Set<Long> set = new HashSet<>();
set.add(1L);
System.out.println(set);
String setStr = JsonUtil.serialize(set);
set = JsonUtil.deserialize(setStr);
set.add(1L);
System.out.println(set);
}
}
JsonUtil.java
public class JsonUtil<T> {
/**
* 序列化
*
* @param object 序列化对象
* @return
*/
public static String serialize(Object object) {
return JSON.toJSONString(object);
}
/**
* Set反序列化
*
* @param jsonStr 序列化结果
* @return
*/
public static Set deserialize(String jsonStr) {
return JSON.parseObject(jsonStr, Set.class);
}
}
测试结果:
[1]
[1, 1]
出现这种情况的原因是什么
反序列化没带类型参数,可能默认反序列化成了
Integer
,再放一个Long
进去,并不冲突,于是可以放两个用
Long
遍历一下这个set就会报ClassCastException
了