И readTypedList()
, и createTypedArrayList()
были записаны как операция "read" для операции writeTypedList()
"write". Поскольку оба они должны работать с одними и теми же данными, различия между ними относительно невелики.
Одно очевидное отличие состоит в том, что readTypedList()
будет "заполнять" любую реализацию List
, которую вы хотите (например, LinkedList
и т. Д.), Тогда как createTypedArrayList()
будет только когда-либо возвращать ArrayList
.
Другое: readTypedList()
позволяет избегать выделения более одного List
экземпляра, если вам нужно запустить несколько операций чтения в строке; вы можете передавать один и тот же экземпляр List
каждому вызову readTypedList()
, а затем обрабатывать его содержимое. readTypedList()
будет корректно перезаписывать существующие данные и увеличивать / уменьшать список по мере необходимости, чтобы точно соответствовать всем вновь прочитанным данным. С другой стороны, createTypedArrayList()
всегда будет возвращать новый ArrayList
экземпляр.
Вероятно, самое большое отличие заключается в том, как они ведут себя, когда вы читаете список null
. Если парная операция «запись» была dest.writeTypedList(null)
, то createTypedArrayList()
может вернуть значение null
... но readTypedList()
может только очистить существующий переданный список, оставляя вас с пустым, не нулевой список. Это делает практически невозможным определить, был ли ранее написанный список null
или просто пуст, и поэтому я всегда использую createTypedArrayList()
.
Кроме этого, нет никаких отличий. Оба используют Creator.createFromParcel()
для фактического извлечения базовых данных, и оба могут обрабатывать null
элементов в списке. Опять же, оба метода должны быть в паре с writeTypedList()
, поэтому вероятность различий между ними весьма ограничена.