0Pricing
Kotlin Academy · Aula

Parâmetros de tipo reified: acessando T em tempo de execução

Use reified com funções inline para realizar verificações e conversões de tipo em tempo de execução.

Parâmetros de tipo reified: acessando T em tempo de execução é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.

O problema do apagamento de tipos

Kotlin/JVM apaga as informações de tipos genéricos durante a execução. Dentro de uma função genérica fun foo(), não é possível escrever T::class nem is T — a JVM não sabe o que é T após a compilação.

reified ao resgate

Combine inline com reified no parâmetro de tipo. Como a função é inserida no local da chamada, o compilador substitui o tipo real em cada local de chamada — tornando T totalmente acessível durante a execução.

inline fun <reified T> isInstance(value: Any): Boolean = value is T

val result = isInstance<String>("hello")  // true

Verificando o tipo com is T

Sem reified, is T causa um erro em tempo de compilação (“Não é possível verificar uma instância de um tipo apagado”). Com ele, o compilador reescreve a verificação usando o tipo concreto fornecido no local da chamada.

inline fun <reified T> filterByType(list: List<Any>): List<T> =
    list.filterIsInstance<T>()

Obtendo KClass de T

Você pode obter a KClass do parâmetro de tipo com T::class. Isso permite verificações de tipo sem reflexão e referências de classes passadas para APIs.

inline fun <reified T> className(): String = T::class.simpleName ?: "Unknown"

println(className<Int>())  // "Int"

Analisando com reified

Um padrão comum é um auxiliar parseJson seguro quanto aos tipos que recebe automaticamente a classe de destino:

inline fun <reified T> parseJson(json: String): T =
    jacksonObjectMapper().readValue(json, T::class.java)

Padrão ViewModel / Localizador de serviços

Contêineres de injeção de dependências frequentemente usam reified para retornar a instância correta sem exigir que você passe um argumento Class:

inline fun <reified T : ViewModel> Fragment.viewModel(): T =
    ViewModelProvider(this)[T::class.java]

Chamando APIs Java com Class<T>

Muitas APIs Java exigem um argumento Class. reified permite chamá-las sem obrigar quem faz a chamada a passar a classe explicitamente:

inline fun <reified T> Gson.fromJson(json: String): T =
    fromJson(json, T::class.java)

Reificados e restrições de tipo

Você pode combinar reified com limites superiores:

inline fun <reified T : Any> create(): T =
    T::class.java.getDeclaredConstructor().newInstance()

Limitações

Parâmetros de tipo reificados funcionam apenas em funções inline — não em classes, interfaces ou funções que não sejam inline. Você não pode chamar uma função reified com um tipo desconhecido, conhecido apenas em tempo de execução.

Como o compilador implementa isso

Em cada local de chamada, o compilador substitui T pelo argumento de tipo real. O bytecode no local da chamada contém referências diretas à classe concreta — sem necessidade de reflexão.

Exemplos da biblioteca padrão

Funções da biblioteca padrão que usam reified: filterIsInstance(), emptyArray(), arrayOf(), typeOf(). Elas funcionam precisamente porque são inline + reified.

Verificação rápida

Por que reified exige que a função seja inline?

Recapitulação: parâmetros de tipo reificados

Principais conclusões:

  • reified torna um parâmetro de tipo acessível em tempo de execução, contornando o apagamento de tipos
  • Exige que a função seja inline
  • Permite usar is T, T::class, T::class.java dentro da função
  • É a base da análise JSON segura quanto aos tipos, dos auxiliares de DI e das APIs de referência de classes

Perguntas Frequentes

A aula “Parâmetros de tipo reified: acessando T em tempo de execução” é grátis?

Sim — o texto completo de “Parâmetros de tipo reified: acessando T em tempo de execução” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.

O que vou aprender em “Parâmetros de tipo reified: acessando T em tempo de execução”?

Use reified com funções inline para realizar verificações e conversões de tipo em tempo de execução. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Kotlin Academy?

Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.

Quanto tempo leva a aula “Parâmetros de tipo reified: acessando T em tempo de execução”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Kotlin Academy?

Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Funções inline: eliminando a sobrecarga de lambdas
  2. Modificadores noinline e crossinline
  3. Parâmetros de tipo reified: acessando T em tempo de execução
  4. Padrões práticos com reified: análise, DI e serialização
← Voltar para Kotlin Academy