หาก Java Class เป็น Generic Type และใช้กับ Gson Library สำหรับ JSON Serialization และ Deserialization Gson มีคลาส com.google.gson.reflect.TypeToken เก็บ Generic Types โดยสร้าง TypeToken Class ส่ง Class Type เข้าไป Gson จึงรู้จัก Class ใน Generic ได้
Syntax
public class TypeToken<T> extends java.lang.Object
ตัวอย่าง: Generic List<String> Serialization/Deserialization
import java.lang.reflect.Type;
import java.util.*;
import com.google.gson.*;
import com.google.gson.reflect.*;
public class GenericTypesJSONTest {
public static void main(String[] args) {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
List<String> list = Arrays.asList("INDIA", "AUSTRALIA", "ENGLAND", "SOUTH AFRICA");
// Serialize
String jsonStr = gson.toJson(list);
System.out.println(jsonStr);
// Deserialize - ต้องใช้ TypeToken
Type listType = new TypeToken<List<String>>() {}.getType();
list = gson.fromJson(jsonStr, listType);
System.out.println(list);
}
}
ผลลัพธ์
[
"INDIA",
"AUSTRALIA",
"ENGLAND",
"SOUTH AFRICA"
]
[INDIA, AUSTRALIA, ENGLAND, SOUTH AFRICA]
จุดสำคัญ: ใช้ new TypeToken<List<String>>() {}.getType() (Anonymous Inner Class) เพื่อ Capture Generic Type Information ที่ถูก Erase ที่ Runtime
ใช้กับ: List<T>, Set<T>, Map<K,V>, Custom Generic Classes