在反序列化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/