Вывод типа Kotlin faild

Когда я использую как Kotlin, так и Java в моем проекте В Java BaseActivity.class:

public abstract <T extends BaseViewModel> Class<T> bindViewModel(); 

И когда я расширяю BaseActivity In Kotlin:

 override fun <T : BaseViewModel<*, out IBaseView<*>>?> bindViewModel(): Class<T> { return ArchViewModel::class.java } 

Котлин напоминает мне, что возвращение – это вывод типа faild

 Type inference failed. Expected type mismatch: required:Class<T> found:Class<ArchViewModel> 

Как исправить эту проблему?

PS ArchViewModel.class расширяет BaseViewModel

Вывод типа не терпит неудачу. Ваша подпись метода говорит, что она может возвращать Class<T> для любого T (который расширяет BaseViewModel ), который вы запрашиваете, поэтому его можно называть, например, как

 activity.bindViewModel<SomeRandomModel>() 

и должен возвращать Class<SomeRandomModel> . Поскольку ArchViewModel::class.java не является Class<SomeRandomModel> , реализация неверна.

На самом деле это невозможно реализовать правильно в Kotlin или Java. Если return ArchViewModel.class компилируется в Java, это связано с тем, что вы используете необработанный тип BaseViewModel , поэтому компилятор отказывается от проверки типов и не сообщает об ошибке.

Поэтому вам нужно исправить метод, чтобы он мог быть реализован. Как, зависит от того, что вы на самом деле хотите от него.

В качестве альтернативы вы можете «исправить» его, return ArchViewModel::class.java as Class<T> . Компилятор правильно предупредит вас о том, что это приведение небезопасно.

Intereting Posts
Kotlin: Сохранить изображение в базе данных Как конвертировать этот код из iOS swift в Android Kotlin Как создать экземпляр абстрактного класса в Котлине? Как добавить приложение create-react-kotlin-app в качестве модуля для проекта kotlin-multiplatform? Kotlin: Невозможно объявить аргумент типа mutableListOf в определении класса kotlin, которая может использовать соединение httpS без проверки сертификата (например, curl – insecure) Выполните краткое описание добавления свойств класса в Котлине Создайте счетчик, который изменяет его ширину при выборе элемента Kotlin более высокий порядок (вызываемые ссылки) компилятор сбой Как установитьOnNavigationItemListener в BottomNavigationView в android с помощью Kotlin? Dagger2 не работает в android @uncheckedVariance в Котлине? Kotlin получает цель jquery click Объединение / объединение классов данных в Котлин Объявление функции Kotlin: знак равенства перед фигурными скобками