Kotlin предоставляет тип при генерации экземпляра из универсального класса - PullRequest
0 голосов
/ 23 января 2019

Каким-то образом я смог создать много общих классов, используя пример ниже

val company = Fragment<Company>
val location= Fragment<Location>
val employee = Fragment<Employee>

Чтобы сделать код простым, я решил поместить все классы в список и сгенерировать класс для каждого из них в цикле for

data class FragmentType(val entityClass: KClass<*>)
private val fragmentList: List<FragmentType> = listOf(
    FragmentType(Company::class),
    FragmentType(Location::class),
    FragmentType(Employee::class)
)

for(f in fragmentList){
    val fragment = Fragment<f.entityClass> //This is wrong
}

Я знаю, что строка в цикле for неправильная, как я могу использовать переменную для определения типа генерика, который я собираюсь сгенерировать?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Перечисление (ответ выше) не обязательно.

val fragment = when(f.entityClass) {
    is Company -> Fragment<Company>
    is Location -> Fragment<Location>
    is Employee -> Fragment<Employee>
    else -> throw IllegalArgumentException("doesn't support class ${f.entityClass}")
}
0 голосов
/ 23 января 2019

Вы можете использовать enum в этом случае:

enum class FragmentType {
    COMPANY, LOCATION, EMPLOYEE
}

for(f in FragmentType.values()) {
    val fragment = when (f) {
        FragmentType.COMPANY -> Fragment<Company>
        FragmentType.LOCATION -> Fragment<Location>
        FragmentType.EMPLOYEE -> Fragment<Employee>
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...