Przez type erasure informacja o typie generycznym nie jest dostępna w runtime. `reified` w funkcji `inline` zachowuje typ w miejscu wywołania, więc możesz użyć np. `T::class` albo `value is T`.
inline fun <reified T> Any?.asTypeOrNull(): T? = this as? T
val x: Any = 123
val n: Int? = x.asTypeOrNull<Int>()Na JVM generyki są wymazywane w runtime (nie zrobisz normalnie `value is T`).
`reified` + `inline` działa, bo kompilator wkleja ciało funkcji w miejsce wywołania i może „podstawić” konkretny typ.
inline fun <reified T> Any?.asOrNull(): T? = this as? T
val x: Any = 1
val i: Int? = x.asOrNull<Int>()