Ответ 1
Посмотрите подпись fromJson
:
public <T> T fromJson(String json, Type typeOfT)
Как вы можете видеть, этот метод имеет параметр типа T
, но вы его вызывали без указания его. Таким образом, тип inferencer понимал его как new Gson().fromJson[Nothing](m, t)
, и всему выражению присваивался тип Nothing
.
В Scala, Nothing
- это нижний тип, который является подтипом всех типов и не имеет значений. Методы, возвращающие Nothing
, никогда не вернутся, потому что они всегда генерируют исключение, попадают в бесконечный цикл, принудительно завершают программу (например, sys.exit()
) и т.д. В вашем случае вызов fromJson
вызовет ClassCastException
, если JVM пытается передать результат в Nothing
. Поэтому все после этого звонка является мертвым кодом.
Такое поведение вывода типа отличается от Java, которое обычно выводит здесь new Gson().<Object>fromJson(m, t)
.