投射到 ArrayList<?在 onSaveInstanceState 中保存列表时扩展 Parcelable>

Casting to ArrayList<? extends Parcelable> when saving List in onSaveInstanceState

我找不到答案:

我想在 onSaveInstanceState 中保存一个 Parcelable ArrayList,但是当我这样做时它不接受声明为列表的 ArrayList:

outState.putParcelableArrayList(KEY_QUESTION_LIST, questionList);

所以我有 2 个选择:将 List 声明为 ArrayList 或将其转换为 Parcelable ArrayList,如下所示:

outState.putParcelableArrayList(KEY_QUESTION_LIST, (ArrayList<? extends Parcelable>) questionList);

并将其声明为列表:

private List<Question> questionList;

在网上我只看到第一种方法,所以我想知道第二种方法是否有任何缺点?

假设您的列表声明如下:

List<MyObject> list = new ArrayList<>();

没有问题以后想写(ArrayList) list。但是,我认为这总体上是一个比简单地将列表声明为 ArrayList 更糟糕的选择:

ArrayList<MyObject> list = new ArrayList<>();

作为 Java 程序员,我们被教导为变量使用接口类型,因为它允许我们使用任何实现类型,而不仅仅是特定的实现类型。但是在将列表放入 Bundle 的情况下,您 需要 特定的实现类型。因此,请继续使用它。