如何消除通用类型擦除警告?

时间:2019-03-05 02:23:00

标签: scala type-parameter

这是一个功能:

  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,但我不知道解决方案如何应用于我的问题。

0 个答案:

没有答案