Я видел ряд других похожих вопросов, но я думаю, что есть уровень абстракции помимо тех, которые имеют значение.А именно, у меня есть служебный класс со статическим универсальным методом-оболочкой для десериализации объекта универсального типа (неизвестного во время сборки):
public final class Utils {
public static final Gson sGson = new Gson();
public static synchronized <T> T fromJson(String doc) {
return sGson.fromJson(doc, new TypeToken<T>(){}.getType());
}
}
Простой класс для тестирования:
public class TestDocument {
public TestDocument(String test) {
this.test = test;
}
public String test;
}
Это хорошо работает:
assertEquals(
new TestDocument("test").test,
((TestDocument) Utils.sGson.fromJson(
"{\"test\": \"test\"}",
new TypeToken<TestDocument>(){}.getType())).test);
Но то, что выглядит как эквивалентный способ вызова этого, хотя статический универсальный вспомогательный метод этого не делает:
assertEquals(
new TestDocument("test").test,
Utils.<TestDocument>fromJson("{\"test\": \"test\"}").test);
Выдает следующее исключение:
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap не может быть приведен к TestDocument
Есть ли способ заставить его работать через универсальный метод?