# Getting Real with Kotlin's Reified Type Parameters

DevFeed: [Getting Real with Kotlin's Reified Type Parameters](<https://devfeed.tech/articles/getting-real-with-kotlin-s-reified-type-parameters-25034.md>)

Original publisher: [Read original article](<https://typealias.com/guides/getting-real-with-reified-type-parameters/>)

Author: author@typealias.com (Dave Leeds)

Published: 2017-10-12T02:26:46Z

Content type: tutorial

Language: en

Sources: [Dave Leeds on Kotlin - typealias.com](<https://devfeed.tech/sources/dave-leeds-on-kotlin-typealias-com.md>)

Topics: [Kotlin](<https://devfeed.tech/topics/kotlin.md>), [Code](<https://devfeed.tech/topics/code.md>)

Tags: [compiler](<https://devfeed.tech/tags/compiler.md>), [generic](<https://devfeed.tech/tags/generic.md>), [generics](<https://devfeed.tech/tags/generics.md>), [kotlin](<https://devfeed.tech/tags/kotlin.md>), [programming](<https://devfeed.tech/tags/programming.md>), [reification](<https://devfeed.tech/tags/reification.md>), [reified-type-parameter](<https://devfeed.tech/tags/reified-type-parameter.md>), [type-parameter](<https://devfeed.tech/tags/type-parameter.md>), [type-parameters](<https://devfeed.tech/tags/type-parameters.md>)

## AI overview

This Kotlin tutorial explains where generic type parameters can replace concrete class names and where they cannot. It introduces reified type parameters, explaining that they work with inline functions because the function body is expanded at the call site, allowing type comparisons and access to Class objects at runtime.

## Source excerpt

Let's think for a moment about everything that you can do with a class name in Kotlin - think of all the cases where you literally type out the name of a class in your source code. I came up with the following 15 cases, but I probably missed a few. Get your scrolling finger ready, here we go... 1 - Define a member property: private val thing: Thing 2 - Function argument: fun doSomething(thing: Thing) {} 3 - Type argument: val list = listOf<Thing>() 4 - Type parameter constraint: class Item<T : Thing> 5 - Cast to the type: something as Thing 6 - Define the class: open class Thing {} 7 - Extend the class: class Other : Thing() 8 - Import the class: import com.