I changed your code a bit. Now a function getMapper
inline
with a reified
generic type, which makes the call pretty readable in getMapper<Dog>()
.
reified
: reified Kotlin?
private inline fun <reified T> getMapper(): Printer<T> {
when (T::class) {
Cat::class -> return CatPrinter() as Printer<T>
Dog::class -> return DogPrinter() as Printer<T>
}
throw IllegalArgumentException()
}
fun main(args: Array<String>) {
println(getMapper<Dog>().mapToString(Dog()))
println(getMapper<Cat>().mapToString(Cat()))
}
, . getMapper
. , .
, , , .