Во-первых, @Parcelize
заботится только о параметрах первичного конструктора, а не о суперклассе; поскольку у вас его нет, генерируемый им код не будет писать или читать что-либо из Parcel
.
Таким образом, вместо расширения HashMap
(что в любом случае является плохой идеей), вы должны сделать это поле:
@Parcelize
class DataMap(
val map: HashMap<String, String> = hashMapOf()
) : Parcelable, MutableMap<String, String> by map
Часть MutableMap<String, String> by map
заставляет DataMap
реализовать интерфейс, делегируя все вызовы, поэтому data.put("a", "One")
совпадает с data.map.put("a", "One")
.
Он также не реализует Serializable
, поэтому вы не столкнетесь с такой же неопределенностью перегрузки.
Список поддерживаемых типов можно посмотреть по адресу https://kotlinlang.org/docs/tutorials/android-plugin.html, и он включает HashMap
:
коллекции всех поддерживаемых типов: List (сопоставленный с ArrayList), Set (сопоставленный с LinkedHashSet), Map (сопоставленный с LinkedHashMap);
Также имеется ряд конкретных реализаций: ArrayList, LinkedList, SortedSet, NavigableSet, HashSet, LinkedHashSet, TreeSet, SortedMap, NavigableMap, HashMap, LinkedHashMap, TreeMap, ConcurrentHashMap;