我有一个函数可以接收任何 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/