Как мне добиться этого на Java?
Код дротика:
Map<String, dynamic> payload = {
'id' : 2,
'name' : 'John',
'uniqueId' : 3733337,
'books' : [
{
'id' : 3,
'title' : 'reborn',
},
{
'id' : 4,
'title' : 'trust',
}
]
};
Код Kotlin (отлично работает):
val payload: HashMap<String, Any> = intent.getSerializableExtra("payload") as HashMap<String, Any>
Код Java (не работает):
HashMap<String, String> payload = new HashMap<>(intent.getSerializableExtra("payload"));
@gidds Я добавил структуру данных полезной нагрузки.
Эквивалент Kotlin HashMap<String, Any> в Java - это HashMap<String, Object>, а не HashMap<String, String>. Но в любом случае, чтобы дать точный ответ, нам нужно знать, каков тип объекта намерения и какова сигнатура функции getSerializableExtra.
@amanin Спасибо. Понимая, что эквивалент Kotlin HashMap<String, Any> в Java - это HashMap<String, Object>, я обновил свой Java-код следующим образом: HashMap<String, Object> payload = intent.getSerializableExtra("payload");, и он работал нормально. Спасибо




Можете ли вы быть уверены, что значение является - это HashMap? Есть много реализаций Map на JVM. - Но проблема, вероятно, в том, что, хотя Kotlin
asдействительно является приведением (и поэтому будет генерировать исключение, если значение является какой-либо другой реализацией карты), код Java не выполняет приведение и вместо этого создает новую HashMap. И поскольку вы не можете создать HashMap из любого случайного объекта, вы получите ошибку. Либо сопоставьте версию Kotlin, применив ее (с(HashMap<String, String>)) без создания новой карты, либо (что безопаснее) примените ее кMap<String, String>и создайте новую HashMap из этого.