Чтобы избавиться от unchecked
-предупреждений, используйте @unchecked
(поскольку у вас уже есть практически нетипизированные Object
s, которые летают повсюду, аннотация @unchecked
не делает его хуже):
import scala.reflect.ClassTag
import scala.collection.JavaConverters._
import java.util.{HashMap => JHashMap}
type MapWithObject = JHashMap[String, Object]
def value[T: ClassTag](
parsedMap: MapWithObject,
path: String,
index: Int = 0
): Option[T] = {
val key = if (path.contains(".")) path.split("\\.")(index) else path
parsedMap.asScala.get(key).flatMap({
case value: T => Some(value)
case map: JHashMap[String @unchecked, Object @unchecked] =>
value(map, path, index + 1)
case _ => None
})
}
В качестве средства для длительного java.util.HashMap
вы можете использовать переименование импорта HashMap => JHashMap
вместо определения типа.