正则表达式
测试网址
List<?>
List<List<Object>> dataList = (List<List<Object>>) httpResponseBody.getData();
for (List<Object> data : dataList) {
DataSourceEntity dataSource = new DataSourceEntity(dataSourceEntity);
dataSource.setData(data);
res.add(dataSource);
}
报错
{
"code": 500,
"data": null,
"message": "class java.util.LinkedHashMap cannot be cast to class java.util.List (java.util.LinkedHashMap and java.util.List are in module java.base of loader 'bootstrap')"
}
而
List<?> dataList = ((List<?>)httpResponseBody.getData());
for (Object data : dataList) {
DataSourceEntity dataSource = new DataSourceEntity(dataSourceEntity);
dataSource.setData(data);
res.add(dataSource);
}
可以。
其中
@Transient
private Object data;
出现这种情况的原因是:
在第一种情况中,你明确地将httpResponseBody.getData()的结果强制转换为List<List<Object>>类型,但实际上返回的是一个LinkedHashMap,这与期望的类型不匹配,所以会报类型转换错误。
而在第二种情况中,你只是将返回值先转换为一个宽泛的List<?>类型,这样做实际上是在弱化类型检查,只要对象可以被视为某种列表(即使其具体类型不是你期望的严格的List<List<Object>>),在运行时就不会立即报错。并且你的DataSourceEntity中的data字段是Object类型,所以可以接受各种不同类型的对象,包括从这个宽泛的列表中取出的单个对象。
需要注意的是,第二种方式虽然在运行时不报错,但可能存在潜在的问题,因为你失去了对数据类型的严格控制,在后续使用这些数据时可能需要进行额外的类型检查和转换,以确保正确地处理数据。
Git
分支和主分支有冲突
- 先checkout origin/分支
- 把origin/master pull进本地分支
- 修改冲突Merge
- Commit and Push