如何在没有警告的情况下匹配未知的通用类型
How to match on unknown generic type without warnings
我有一个函数可以接收任何 Java/Scala 类型的输入作为参数:
def foo(arbitraryInput: Object): Option[Object] = {
arbitraryInput match {
case map: Map[Object, Object] => map.get("foo")
// ...
case _ => None
}
}
我对 : Map[Object, Object]
模式有疑问:
如果我说 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]
”?
您可以将 @unchecked
注释添加到某些类型参数:
def test(data: Any): Option[Any] = data match {
case map: Map[Any @unchecked, _] => map.get("foo")
case _ => None
}
我有一个函数可以接收任何 Java/Scala 类型的输入作为参数:
def foo(arbitraryInput: Object): Option[Object] = {
arbitraryInput match {
case map: Map[Object, Object] => map.get("foo")
// ...
case _ => None
}
}
我对 : Map[Object, Object]
模式有疑问:
如果我说
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]
”?
您可以将 @unchecked
注释添加到某些类型参数:
def test(data: Any): Option[Any] = data match {
case map: Map[Any @unchecked, _] => map.get("foo")
case _ => None
}