Я пытаюсь получить массив JSON к deserliaze при использовании дженериков см моя работа ниже:Gson fromJson используя общий суперкласс
public class Lookup<T extends Profile> {
protected final Class<T> getSuperClass() {
ParameterizedType superClass = (ParameterizedType)this.getClass().getGenericSuperclass();
return (Class<T>)(superClass.getActualTypeArguments().length == 0 ? BasicProfile.class : superClass.getActualTypeArguments()[0]);
}
protected final Class<T[]> getSuperClassArray() {
ParameterizedType superClass = (ParameterizedType)this.getClass().getGenericSuperclass();
return (Class<T[]>)(superClass.getActualTypeArguments().length == 0 ? BasicMojangProfile[].class : superClass.getActualTypeArguments());
}
public void doWork() { // This Works
String jsonText = "{id=3, name=Derp}";
T result = new Gson().fromJson(jsonText, this.getSuperClass());
// Will be whatever T is (defined elsewhere), unless this class
// is created without a super class then properly defaults to
// the BasicProfile
}
public void doArrayWork() { // DOES NOT WORK
String jsonText = "[{id=3, name=Derp}]";
T[] result = new Gson().fromJson(jsonText, ?);
// Have tried the following (in place of the ?):
// new TypeToken<T>(){}.getType()
// new TypeToken<T[]>(){}.getType()
// new TypeToken<List<T>>(){}.getType() // with List<T> result
// this.getSuperClassArray()
}
}
Как я могу получить doArrayWork функционировать должным образом? Я не хочу передавать значение T в качестве параметра для метода.
Не могу поверить, как невероятно просто решение было ... tyvm –