Generic types are "erased" at compile time. The strong type checking in Kotlin
can use those generic types at compile time, but at runtime, the types are
no longer there. This has implications for cases where you need the actual
type at runtime, such as for
One workaround is if you have an
inline function that uses a generic type.
You can add the
reified keyword before the type, and that tells the Kotlin
compiler to make that type available at runtime inside of that inline function.
So, in the example above, if we skip the
reified keyword, we will get a
compile error like "Cannot check for instance of erased type: T". But with
reified keyword, the code compiles and works.
the same way that
filterIsInstance() does in the Kotlin standard library,
returning a subset of items that match the desired type.