Краткий ответ:
В вашем примере это не имеет значения, за исключением эстетики.
Длинный ответ:
Если вы передадите T
какreified
, вы можете извлечь KClass
из параметра типа reified
T
, например,
val kClass = T::class
в любое время.Затем у вас есть все опции, которые вы бы использовали, используя KClass
в качестве параметра, поэтому здесь нет никакой разницы.
В некоторых случаях вам нужно использовать KClass
в качестве параметра.Здесь два:
1) Нет встроенного
Когда вы не хотите, чтобы ваша функция была inline
, потому что использование типа reified
работает только свстроенные функции.
2) Значения по умолчанию
Другая ситуация может быть значениями по умолчанию:
fun f(kClass: KClass<*> = Int::class) { /*...*/ }
Вы не можете достичь точно такого же спараметр типа reified.
Вывод:
Во всех других случаях используйте параметр универсального типа, поскольку он делает сайт вызова более сжатым, как показано здесь (которыйможет быть личным предпочтением):
inline fun <reified T> printType() {
println(T::class.simpleName)
}
fun printType(kClass: KClass<*>) {
println(kClass.simpleName)
}
Call-сайт
printType<Int>() // better
printType(Int::class)