在反序列化Parcelables时,我通常使用createTypedArrayList (Creator<T> c)方法读取Parcelable数组列表。
我最近发现了另一种方法readTypedList (List<T> list, Creator<T> c),它似乎做了完全相同的事情。即使医生看起来也一样。除了实现之外,它们之间有什么区别吗?
*:前者创建新的数组列表,后者将其添加到现有的列表中。

最佳答案

readTypedList()createTypedArrayList()都被写为与writeTypedList()的“write”操作一起进行的“read”操作。由于它们都必须使用完全相同的数据,所以它们之间的差异相对较小。
一个明显的区别是readTypedList()将“填充”任何您想要的List实现(例如LinkedList等),而createTypedArrayList()将只返回ArrayList
另一个是,如果需要在一行中运行多个“read”操作,readTypedList()允许您避免分配多个List实例;您可以将同一个List实例传递给readTypedList()的每个调用,然后在之后处理其内容。readTypedList()将正确覆盖现有数据,并根据需要调整/缩小列表,以完全适合所有新读取的数据。另一方面,createTypedArrayList()将始终返回一个新的ArrayList实例。
不过,最大的区别可能是,当你阅读null列表时,它们的行为方式。如果成对的“write”操作已dest.writeTypedList(null),则createTypedArrayList()可以返回null值…但是readTypedList()只能清除现有的传递的列表,留给您一个空的、非空的列表。这使得基本上无法判断之前写的列表是null还是只是空的,因此我总是使用createTypedArrayList()
除此之外,没有任何区别。两者都使用Creator.createFromParcel()来实际检索底层数据,并且都可以处理列表中的null元素。同样,这两种方法都要与writeTypedList()配对,因此它们之间的变化潜力非常有限。

关于android - 包裹中的createTypedArrayList()和readTypedList()之间的区别,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52243436/

10-09 12:39