Вот функция:
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
массивом или нет.Как я могу сделать это так, чтобы не выдавалось предупреждение компилятора?
Я вижу похожий вопрос здесь , но не могу понять, как решение применимо к моей проблеме.,