You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala类型擦除生效时,为何运行时仍可获取类型信息?

Scala类型擦除下仍能匹配Int/String类型的原因
  • 这里的模式匹配根本没用到泛型参数T的类型信息,而是直接检查Thing实例里value字段的运行时实际类型。
  • Scala的类型擦除只针对泛型参数:Thing[Int]和Thing[String]在运行时都会被擦成Thing[_],但value本身是具体的实例——比如Thing(1)里的value是Int实例,Thing("hello")里的value是String实例,这类非泛型的具体类型(基本类型、String等)在JVM运行时会保留完整的类型标识。
  • 模式匹配语句case Thing(value: Int)的逻辑是:先解构Thing拿到value,再判断这个value的运行时类型是不是Int,整个过程和泛型参数T的擦除完全无关。

举个反例就能看出区别:如果是Thing(List(1)),你写case Thing(value: List[Int])就会失效——因为List[Int]的泛型参数会被擦除,运行时只能识别出是List,没法区分它是List[Int]还是List[String]。

内容的提问来源于stack exchange,提问作者Bostonian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:02:26