Этот вопрос в основном является копией "Java списка необоснованных классов" , но для Kotlin.
Мой вариант использования: у меня есть FragmentStatePagerAdapter
, и я хотел бы передать ему ArrayList
необоснованных Fragment
с. У меня есть абстрактный базовый класс TutorialSlideFragment
, который определяет базовый класс c для некоторых слайдов в учебнике. Затем у меня есть 20+ Fragment
s, которые расширяют TutorialSlideFragment
, чтобы добавить некоторые дополнительные функции, если это необходимо. Я хотел бы передать ArrayList
необработанных TutorialSlideFragment
, чтобы адаптер мог при необходимости создавать их экземпляры в нужном классе.
В настоящее время у меня есть следующее:
ArrayList<Class<TutorialSlideFragment>> = arrayListOf(
TutorialSlideFragment::class.java
)
Это работает, но давайте не будем забывать, что TutorialSlideFragment
является абстрактным, поэтому я не хочу этого делать. Я создал WelcomeSlideFragment
, который расширяет TutorialSlideFragment
. Если я сделаю следующее:
var tutorialSlides: ArrayList<Class<TutorialSlideFragment>> = arrayListOf(
WelcomeFragment::class.java
)
я получу следующую ошибку:
Type inference failed. Expected type mismatch:
required:kotlin.collections.ArrayList<Class<TutorialSlideFragment>>
found: kotlin.collections.ArrayList<Class<WelcomeFragment>>
Как я могу иметь ArrayList
для необученных классов, которые расширяют базовый класс?