*
называется проекция звезды .Вы используете его, когда вам нужно указать универсальный тип, но не волнует, что это такое (возможно, потому, что вам это не нужно).
Поскольку этот вопрос не связан каким-либо особым образомДля класса Class<T>
позвольте мне показать вам, как это работает, на простом примере:
Рассмотрим эту простую функцию, которая принимает List
и печатает его:
fun printList(l: List) { println(l) }
Она выигралане компилируется со следующей ошибкой:
Ожидается один аргумент типа для интерфейса List<out E>
Я мог бы исправить это так:
fun <T> printList(l: List<T>) { println(l) }
но это утомительно, потому что на самом деле мне плевать на T
, и мне это не нужно.
А вот и звездная проекция в игре:
fun printList(l: List<*>) { println(l) }
Это будетcompile, короток и лаконичен.
Итак, в вашем конкретном примере вы должны использовать Class<*>
, потому что вам просто не нужно T
.