scala - 如何在不发出警告的情况下匹配未知的泛型类型

标签 scala generics types pattern-matching unchecked-cast

我有一个函数可以接收任何 Java/Scala 类型的输入作为参数:

def foo(arbitraryInput: Object): Option[Object] = {
    arbitraryInput match {
        case map: Map[Object, Object] => map.get("foo")
        // ...
        case _ => None
    }
}

我对 : Map[Object, Object]-pattern 有疑问:

  • 如果我说case map : Map[Object, Object],我会收到一条警告,指出非变量类型参数未选中

  • 如果我说 case map : Map[_, _],我会在 map.get 上收到错误,指示编译器发现类型 _,但正在寻找对象

  • 如果我说 case map : Map 编译器会提示 Map 需要类型参数

是否可以像这样匹配并告诉编译器“嘿,我知道类型信息在运行时丢失,Object很好,只需给我Map[Any, Any] ”?

最佳答案

您可以将@unchecked注释添加到某些类型参数:

def test(data: Any): Option[Any] = data match {
  case map: Map[Any @unchecked, _] => map.get("foo")
  case _ => None
}

关于scala - 如何在不发出警告的情况下匹配未知的泛型类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69684128/

相关文章:

inheritance - Scala:如何继承 "static slot"?

java - T extends SomeClass 的意义是什么?

scala - Spark 应用程序中的作业总数

swift 3 : Any way to declare a static class function to restrict closure type to Self?

java - 使用通用接口(interface)时不调用 EJB 拦截器

php - [PHP]如何在没有实例化的情况下检查一个类是否继承了另一个类?

go - Go 是否支持嵌套类型声明或对匿名结构的文字赋值?

haskell - 如何处理 Haskell 列表推导式中的 Maybe 类型

scala - 多个 Futures in Play 和使用案例类来保存 future 数据

scala - 在 maven 包生成的源 jar 中包含 scala 类