У меня есть проект Android, который я взял на себя, который смешивает Kotlin и Java, и я прохожу и конвертирую весь Kotlin в Java, поскольку наши команды знают Java. Проблема, с которой я сталкиваюсь, - это «Необработанное использование параметризованного класса ArrayList». Я не могу понять, какой класс я должен передать в ArrayList , Чтобы избавиться от предупреждения.

Вот мой код:

ArrayList amenities = new ArrayList<>();

amenities.add(MapsKt.hashMapOf(
   TuplesKt.to("ID", q.amenityID),
   TuplesKt.to("bExists", q.getAnswer().equals("1")),
   TuplesKt.to("Notes", Utils.CleanStringForUpload(q.amenityNotes))
));
0
jpeggtulsa 18 Авг 2021 в 19:12

2 ответа

Лучший ответ

Похоже на List<Map<String, Object>> - список содержит карты (вы добавляете результат вызова hashMapOf.

Таким образом, эта карта, похоже, отображает строки, такие как ID, в сумку с необычными вещами. Это запах кода и то, что рано или поздно потребует рефакторинга - почему бы вам не сделать что-то вроде:

class WhateverThisMightBe {
    String id;
    boolean exists;
    String notesHtml;
}

А вместо этого иметь List<WhateverThisMightBe>? Это идиоматическая java / kotlin. List<Map<String, Object>> пытается заново изобрести javascript / PHP в очень грубой манере в java. Не хорошая идея.

1
rzwitserloot 18 Авг 2021 в 16:18

Похоже, что элемент массива должен быть HashMap<String, Object>. Итак, вы используете ArrayList<HashMap<String, Object>> или даже лучше: List<Map<String, Object>>.

Но если MapsKt.hashMapOf() не может вывести наиболее конкретный тип - просто используйте ArrayList<Map<?,?>> и покончите с этим.

0
tony.ganchev 18 Авг 2021 в 16:19