Свойство Kotlin: «Тип параметра свойства должен использоваться в типе приемника»

У меня есть следующие простые функции расширения Котлина:

// Get the views of ViewGroup inline val ViewGroup.views: List<View> get() = (0..childCount - 1).map { getChildAt(it) } // Get the views of ViewGroup of given type inline fun <reified T : View> ViewGroup.getViewsOfType() : List<T> { return this.views.filterIsInstance<T>() } 

Этот код компилируется и работает отлично. Но я хочу, чтобы функция getViewsOfType была свойством, как и views . Android Studio даже предлагает это. Я разрешаю AS делать рефакторинг и генерирует этот код:

 inline val <reified T : View> ViewGroup.viewsOfType: List<T> get() = this.views.filterIsInstance<T>() 

Но этот код не компилируется. Это вызывает ошибку: «Тип параметра свойства должен использоваться в его типе приемника»

В чем проблема? Поиск справки об этой ошибке, похоже, не приводит к ответу.

Ошибка означает, что вы можете иметь только общий тип типа для свойства расширения, если вы используете указанный тип в типе приемника – тип, который вы расширяете.

Например, у вас может быть расширение, которое расширяет T :

 val <T: View> T.propName: Unit get() = Unit 

Или тот, который расширяет тип, который использует T как параметр:

 val <T: View> List<T>.propName: Unit get() = Unit 

Что касается этого, я думаю, причина в том, что свойство не может иметь общий тип параметров, например, функцию. Хотя мы можем вызвать функцию с типичным параметром типа …

 val buttons = viewGroup.getViewsOfType<Button>() 

… Я не считаю, что для свойств существует аналогичный синтаксис:

 val buttons = viewGroup.viewsOfType<Button> // ?? 
Intereting Posts
Показать Android DialogFragment как диалог в портретном режиме и как часть активности в ландшафтном режиме Как сделать PreferenceActivity запустите диалоговое окно для настройки пользовательских настроек Как вставить объемные данные в базу данных android sqlite с помощью ormlite эффективно Android: растяжка между двумя фиксированными LinearLayouts Взгляд на поверхность размытия Android, используемый в камере Как отобразить значение переменной на экране На какую ошибку это указывает – «new_window_surface возвращает 0x3000» Объединить layout_weight и maxWidth для просмотров Записывать личный файл во внутреннее хранилище Qt – Компиляция для Linux не является компиляцией для Android? Зачем? Как избежать мигающего изображения при сохранении изображения после поворота анимации? Как установить большой значок для уведомления GCM Android Honeycomb расширенный «Таблица» / Управление сеткой Место Android иногда слишком старое Выпускать ресурсы в onPause вместо onDestroy