Reified generics
Previously in this chapter, we mentioned inline
functions. Since inline
functions are copied, we can get rid of one of the major JVM limitations: type erasure. After all, inside the function, we know exactly what type we're getting.
Let's look at the following example. We would like to create a generic function that will receive a Number
(Number
can either be Int
or Long
), but will only print it if it's of the same type as the function type.
We'll start with a naïve implementation, simply trying the instance check on the type directly:
fun <T> printIfSameType(a: Number) { if (a is T) { // <== Error println(a) } }
However, this code won't compile and we'll get the following error:
> Cannot check for instance of erased type: T
What we usually do in Java, in this case, is pass the class...