我正在为 Scala 案例类编写一个自定义序列化器,并有一个实用函数来确定各种符号是否是案例类:
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)
检查isInstanceOf
导致警告,但我不知道为什么:
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
我理解当涉及泛型时的类型擦除,例如 JVM 无法区分List[Integer]
,List[String]
我们进入类型标记领域来解决这些问题。但在我的例子中MethodSymbol
是的子类,Symbol
那么为什么要进行类型擦除呢?
有人可以解释一下吗?
谢谢,
大卫