Gson在处理泛型类型时,由于类型擦除的原因,可能会遇到类型转换的问题。但是,你可以通过以下方法来处理泛型类型:
- 使用TypeToken:
Gson提供了TypeToken类来处理泛型类型。TypeToken允许你在运行时获取泛型的实际类型。以下是一个示例:
import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import java.lang.reflect.Type; import java.util.List; public class Main { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("Hello"); list.add("World"); Gson gson = new Gson(); Type type = new TypeToken >() {}.getType(); List
deserializedList = gson.fromJson(gson.toJson(list), type); System.out.println(deserializedList); } }
- 使用TypeAdapter:
你还可以为Gson创建一个自定义的TypeAdapter来处理泛型类型。以下是一个示例:
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.TypeAdapter; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; import java.io.IOException; import java.lang.reflect.Type; import java.util.List; public class Main { public static void main(String[] args) { Listlist = new ArrayList<>(); list.add("Hello"); list.add("World"); Gson gson = new GsonBuilder() .registerTypeAdapter(List.class, new ListTypeAdapter()) .create(); String json = gson.toJson(list); List deserializedList = gson.fromJson(json, List.class); System.out.println(deserializedList); } static class ListTypeAdapter extends TypeAdapter > { @Override public void write(JsonWriter out, List> value) throws IOException { out.beginArray(); for (Object item : value) { out.value(item.toString()); } out.endArray(); } @Override public List> read(JsonReader in) throws IOException { List
list = new ArrayList<>(); in.beginArray(); while (in.hasNext()) { list.add(in.nextString()); } in.endArray(); return list; } } }
请注意,这些示例仅适用于List泛型类型。对于其他泛型类型,你可能需要为相应的类型创建自定义的TypeAdapter。