Como funciona a palavra-chave reified em Kotlin e por que ela é necessária para genéricos?
Olá! Recentemente comecei a estudar Kotlin e me deparei com um problema ao trabalhar com genéricos. Em Java, estou acostumado que o tipo é apagado durante a execução e não é possível verificar se um objeto é uma instância do tipo T. Mas em Kotlin, vi que é possível usar a palavra-chave reified para contornar essa limitação.
Aqui está um exemplo que não funciona:
```kotlin
fun checkType(value: Any): Boolean {
return value is T // Erro de compilação: Cannot check for instance of erased type: T
}
```
Quero escrever uma função que verifica se o objeto passado é de um tipo específico, passado como parâmetro genérico. Por exemplo, quero chamar `checkType("hello")` e obter true, e `checkType("hello")` — false.
Ouvi dizer que para isso é necessário usar `inline` e `reified`. Mas como exatamente isso funciona? Por que os genéricos comuns não conseguem fazer isso? E o que acontece "sob o capô" quando adiciono reified? Explique, por favor, com exemplos de código, como usar corretamente.