这是一个功能:
def func(map: Map[Any, Any]): String = {
val mapping: Map[String, String] = map.map{
case (k: Int, v: mutable.WrappedArray[String]) => k.toString -> JSONArray(v.toList).toString()
case (k, v) => k.toString -> v.toString
}
JSONObject(mapping).toString()
}
此函数接受一个Scala Map
对象并对其进行JSON化。它绝不是详尽无遗的,但是它很简单,使用Scala内置函数,并且可以针对我在应用程序中遇到的所有潜在Map类型参数正确运行。
但是,这会产生一个编译器警告:
[WARNING] /opt/kyvrepos/kyv-platform/src/main/scala/com/pwc/kyv/package.scala:93: warning: non-variable type argument String in type pattern scala.collection.mutable.WrappedArray[String] is unchecked since it is eliminated by erasure
[WARNING] case (k: Int, v: mutable.WrappedArray[String]) => k.toString -> JSONArray(v.toList).toString()
对我来说,警告的原因很明显。我想弄清楚如何消除它。显而易见的解决方案是删除WrappedArray附带的类型信息,因此看起来像case (k: Int, v: mutable.WrappedArray)
。但这不起作用,因为Type mutable.WrappedArray takes type parameters
。
我需要函数根据v
是否为数组采用两条不同的路径。我该如何以不会引发编译器警告的方式进行操作?
我看到了类似的问题here,但我不知道解决方案如何应用于我的问题。