转换为ArrayList <! - ?在onSaveInstanceState中保存List时扩展Parcelable - >

时间:2018-02-25 23:51:10

标签: android list arraylist parcelable onsaveinstancestate

我找不到答案:

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

outState.putParcelableArrayList(KEY_QUESTION_LIST, questionList);

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

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

并将其声明为List:

private List<Question> questionList;

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

1 个答案:

答案 0 :(得分:2)

假设您的列表声明如下:

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

如果您想稍后写(ArrayList) list,则没有问题。但是,我认为这是一个更糟糕的选择,而不是简单地将列表声明为ArrayList开头:

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

作为Java程序员,我们教会使用接口类型作为变量,因为它让我们使用任何实现类型,而不仅仅是特定的实现类型。但是,如果将列表放入Bundle,则需要特定的实现类型。所以请继续使用它。