Intereting Posts
Есть ли способ написать функцию расширения, которая изменяет значение объекта? Исключение Kapt при создании файла XML LMAX Disruptor с Kotlin: нельзя использовать лямбда? Получить N последних объектов, испускаемых наблюдаемыми в RxJava2 Объявление функции Kotlin: знак равенства перед фигурными скобками Как найти, какой элемент не удалось сравнить между массивами в Котлине? Мой RecyclerView не будет уведомлен соответствующим образом Неизвестная функция (Facet ), покрытая несвязанными плагинами не удалось отменить диалог прогресса с помощью метода уклонения в android Почему я получаю несоответствие типа при попытке вернуть значение для проверенного общего параметра? Бинарная версия метаданных – 1.0.1, ожидаемая версия – 1.1.0 Преобразование массива ArrayMap в ArrayList – Kotlin Инструменты статического анализа для языка программирования Kotlin? Как использовать SQLite в Kotlin / Native? Почему экземпляр $ MockitoMock $ не идентифицируется как макет?

Аргумент типа не распознан в Котлине

Используя gson и retrofit и создайте JsonDeserializer.

В java класс определяется как:

public class Test implements JsonDeserializer<NavigationMenu[]> {... 

В Котлине он определяется как:

 class NavigationMenuArrayDeserializer : JsonDeserializer<Array<NavigationMenu>> {... 

Класс Java называется ожидаемым после регистрации в GSON. Класс Котлин никогда не называется.

 Retrofit jsonClient = new Retrofit .Builder() .baseUrl(baseUrl) .client(okHttpClient) .addConverterFactory(getGsonConverter()) .build(); 

 private GsonConverterFactory getGsonConverter() { GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setLenient(); gsonBuilder.registerTypeAdapter(NavigationMenu[].class, new NavigationMenuArrayDeserializer()); Gson gson = gsonBuilder.create(); return GsonConverterFactory.create(gson); } 

Любая идея почему?

Solutions Collecting From Web of "Аргумент типа не распознан в Котлине"

К сожалению, никаких предложений для меня не работало. Я преобразовал вызывающий класс из java в kotlin, поскольку вызовы типов классов java в kotlin легко сработали для меня в прошлом … и это сделало трюк.

Моя первоначальная попытка вызвать класс класса kotlin из класса java по-прежнему не увенчалась успехом, но я смог настроить конфигурацию, поэтому я называю это полным.

Преобразование кода конфигурации Java в OP в Kotlin сделало трюк:

 private val gsonConverter: GsonConverterFactory get() { val gsonBuilder = GsonBuilder() gsonBuilder.setLenient() gsonBuilder.registerTypeAdapter(Array<NavigationMenu>::class.java, NavigationMenuArrayDeserializer()) val gson = gsonBuilder.create() return GsonConverterFactory.create(gson) } 

Вы можете попробовать использовать TypeToken следующим образом.

 private GsonConverterFactory getGsonConverter() { val type = object : TypeToken< ArrayList < NavigationMenu >>(){}.getType() GsonBuilder gsonBuilder = new GsonBuilder(); gsonBuilder.setLenient(); gsonBuilder.registerTypeAdapter(type, new NavigationMenuArrayDeserializer()); Gson gson = gsonBuilder.create(); return GsonConverterFactory.create(gson); } 

Я решил аналогичную проблему, используя класс массива. Попробуйте что-то вроде этого:

 val clazz = (Array<NavigationMenu>::class).java gson.fromJson(json, clazz) 

Надеюсь, это поможет.