Estou escrevendo um serializador personalizado para classes de caso Scala e tenho uma função utilitária para determinar se vários símbolos são classes de caso:
import scala.reflect.runtime.{universe => ru}
def isCaseClass(symbol: ru.Symbol): Boolean = (symbol.isInstanceOf[ru.MethodSymbol] &&
symbol.asInstanceOf[ru.MethodSymbol].isCaseAccessor) ||
(symbol.isInstanceOf[ru.ClassSymbol] &&
symbol.asInstanceOf[ru.ClassSymbol].isCaseClass)
As isInstanceOf
verificações levam a avisos, mas não sei por quê:
abstract type reflect.runtime.universe.MethodSymbol is unchecked since it is eliminated by erasure
abstract type reflect.runtime.universe.ClassSymbol is unchecked since it is eliminated by erasure
Eu entendo a eliminação de tipo quando genéricos estão envolvidos, por exemplo, JVM não consegue distinguir List[Integer]
de List[String]
e entramos no reino das tags de tipo para classificar esses tipos de problemas. Mas no meu caso MethodSymbol
é uma subclasse de Symbol
então por que a eliminação de tipo?
Alguém poderia gentilmente explicar?
Obrigado,
Davi