记一个日常小坑,平时没注意导致的类型转换错误
- 多话不说,先上代码
import com.alibaba.fastjson.JSON;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonTest {
@Test
public void jsonTest(){
List<Long> ids = new ArrayList<>();
ids.add(1l);
ids.add(2l);
Map map = new HashMap(ids.size());
map.put("list", JSON.toJSON(ids));
List<String> receiveIds = (List<String>) map.get("list");
System.out.println(receiveIds.getClass().getName());
for (String r : receiveIds) {
System.out.println(r);
}
}
}
看起来稀松平常的代码,出了bug:
java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.String
为什么呢?
我么看看List receiveIds 的类型一下知道了,他的真实面目是
com.alibaba.fastjson.JSONArray,我强转并没有起到作用。
那问题来了,强转没用的话,我们怎么办呢?
List<String> receiveIds = JSONObject.parseArray(map.get("list").toString(), String.class);
解决了!