2

我有一个函数可以接收任何 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],我会得到一个警告non-variable type argument is unchecked

  • 如果我说case map : Map[_, _],我得到一个错误map.get,表明编译器找到类型_,但正在寻找Object

  • 如果我说case map : Map编译器抱怨 Map 需要类型参数

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

4

1 回答 1

4

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

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

于 2021-10-23T00:42:50.117 回答