加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

期权匹配的Scala类型擦除

发布时间:2020-12-16 18:25:35 所属栏目:安全 来源:网络整理
导读:object Test { def main(args: Array[String]) { val list: List[Double] = List(1.0,2.0,3.0,4.0) val none = None case class Test() val test = Test() def f(x: Any) = x match { case _: Some[Test] = println("_ matched") case None = println("None
object Test {
  def main(args: Array[String]) {
    val list: List[Double] = List(1.0,2.0,3.0,4.0)
    val none = None

    case class Test()

    val test = Test()

    def f(x: Any) = x match {
        case _: Some[Test] => println("_ matched")
        case None => println("None matched")
    }

    f(list)
    f(none)
    f(test)
  }
}

尝试编译上面的代码会导致“擦除”编译时警告.

$>scalac Test.scala
    Test.scala:11: warning: non-variable type argument Test in type pattern
 Some[Test] is unchecked since it is eliminated by erasure
            case _: Some[Test] => println("_ matched")
                    ^
    one warning found

我读了这个备受推崇的Stackoverflow post,但我不明白这里的类型擦除.

解决方法

在jvm的运行时,没有Some [Test]或Some [String]只有Some [Any].所以你无法匹配某些[测试].

在这种情况下,您可以匹配某些内容,如下所示:

case Some(e: Test) => println(s"$e matched")

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读