Ответ 1
После построения JavaType
обе функции называют одинаковые десериализационные функции, поэтому единственное различие заключается в том, как обрабатывается общий тип.
Второй является полностью статическим, поэтому тип должен быть известен в компиляторе и не может меняться. Таким образом, это похоже на использование базового литерала класса.
Первый - динамический, поэтому его можно использовать для построения вещей, которые изменяются в зависимости от их параметризации.
Лично я предпочитаю первую альтернативу для всех случаев (он избегает создания еще одного анонимного внутреннего класса), но второй может быть более читаемым.