Как устранить предупреждение об удалении универсального типа? - PullRequest
0 голосов
/ 05 марта 2019

Вот функция:

  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-ifies его.Это ни в коем случае не является исчерпывающим, но это просто, использует встроенные Scala и работает правильно для всех потенциальных параметров типа карты, с которыми я сталкиваюсь в моем приложении.

Однако, это выдает предупреждение компилятора:

[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 массивом или нет.Как я могу сделать это так, чтобы не выдавалось предупреждение компилятора?

Я вижу похожий вопрос здесь , но не могу понять, как решение применимо к моей проблеме.,

...