Преобразование полезной нагрузки Map <String, dynamic> из Dart в Java HashMap

Как мне добиться этого на 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"));

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

gidds 09.04.2021 16:41

@gidds Я добавил структуру данных полезной нагрузки.

astroame 09.04.2021 18:45

Эквивалент Kotlin HashMap<String, Any> в Java - это HashMap<String, Object>, а не HashMap<String, String>. Но в любом случае, чтобы дать точный ответ, нам нужно знать, каков тип объекта намерения и какова сигнатура функции getSerializableExtra.

amanin 09.04.2021 18:59

@amanin Спасибо. Понимая, что эквивалент Kotlin HashMap<String, Any> в Java - это HashMap<String, Object>, я обновил свой Java-код следующим образом: HashMap<String, Object> payload = intent.getSerializableExtra("payload");, и он работал нормально. Спасибо

astroame 09.04.2021 22:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
27
0

Другие вопросы по теме