错误: 不兼容的类型: List<Data>无法转换为ArrayList<? extends Parcelable> outState.putParcelableArrayList("list_one", (ArrayList<? extends Parcelable>) mData);
时间: 2024-02-27 10:58:55 浏览: 26
这个错误是因为 `List<Data>` 与 `ArrayList<? extends Parcelable>` 之间存在类型不兼容的问题。
解决方法是将 `List<Data>` 转换为 `ArrayList<Data>`,然后再将其转换为 `ArrayList<? extends Parcelable>`。代码如下:
```
outState.putParcelableArrayList("list_one", new ArrayList<>(mData));
```
这里使用了 `ArrayList` 的构造方法将 `List<Data>` 转换为 `ArrayList<Data>`,然后再将其转换为 `ArrayList<? extends Parcelable>`。这样就可以避免类型不兼容的问题了。
相关问题
类型不匹配:不能从 List<List<Object & Serializable & Comparable<?>>> 转换为 List<List<Object>>
这个错误提示说明你尝试将一个 `List<List<Object & Serializable & Comparable<?>>>` 类型的对象转换为 `List<List<Object>>` 类型的对象,但是这两个类型不兼容。
`List<List<Object & Serializable & Comparable<?>>>` 类型表示一个元素类型为 `List`,其中每个元素又是一个元素类型为 `Object`、`Serializable` 和 `Comparable` 的对象的列表。而 `List<List<Object>>` 类型表示一个元素类型为 `List`,其中每个元素又是一个元素类型为 `Object` 的对象的列表。
由于 `Object & Serializable & Comparable<?>` 比 `Object` 类型更加具体,所以 `List<List<Object & Serializable & Comparable<?>>>` 类型的对象不能直接转换为 `List<List<Object>>` 类型的对象,因为前者包含了更多的信息。
如果你需要将 `List<List<Object & Serializable & Comparable<?>>>` 类型的对象转换为 `List<List<Object>>` 类型的对象,你可以考虑先将其中每个元素中的 `Object & Serializable & Comparable<?>` 类型的对象转换为 `Object` 类型的对象,再将整个列表转换为 `List<List<Object>>` 类型的对象。例如:
```java
List<List<Object & Serializable & Comparable<?>>> list1 = ...;
List<List<Object>> list2 = new ArrayList<>();
for (List<Object & Serializable & Comparable<?>> innerList : list1) {
List<Object> convertedInnerList = new ArrayList<>();
for (Object & Serializable & Comparable<?> obj : innerList) {
convertedInnerList.add((Object) obj); // 将 Object & Serializable & Comparable<?> 类型的对象转换为 Object 类型的对象
}
list2.add(convertedInnerList);
}
```
不兼容的类型: AsyncTask<Void,Void,List<User>>无法转换为List<User>
这个错误提示表明你尝试将一个 AsyncTask 对象转换为 List<User> 类型,但是这两者是不兼容的类型。
AsyncTask 是 Android 中的一个类,用于在后台线程中执行异步任务,并在执行完成后返回结果给主线程。而 List<User> 是一个泛型类型,表示包含多个 User 对象的列表。
如果你想要获取 AsyncTask 的执行结果,可以在 AsyncTask 中重写 onPostExecute() 方法,并在该方法中返回 List<User> 类型的结果。例如:
```
class MyAsyncTask extends AsyncTask<Void, Void, List<User>> {
@Override
protected List<User> doInBackground(Void... voids) {
// 执行后台任务,并返回 List<User> 类型的结果
List<User> userList = new ArrayList<>();
// ...
return userList;
}
@Override
protected void onPostExecute(List<User> userList) {
// 在主线程中处理执行结果
// ...
}
}
```
然后,在主线程中创建 MyAsyncTask 对象,并调用 execute() 方法来执行异步任务:
```
MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
```
在 onPostExecute() 方法中,你可以将 List<User> 类型的结果保存到成员变量中,或者直接使用它来更新 UI 界面等操作。