このメモリクラスを作成しました:
public class Memory {
private final Hashtable<String, String> data;
private final Gson gson;
public Memory() {
this.data = new Hashtable<String, String>();
this.gson = new Gson();
}
public <T> void set(String key, List<T> value) {
this.data.put(key, this.gson.toJson(value));
}
public <T> List<T> get(String key, Class<T> cls) {
Type type = new TypeToken<List<T>>() {}.getType();
return this.gson.fromJson(this.data.get(key), type);
}
}
ジェネリック型のリストを json に格納してから、それらを逆シリアル化できます。
しかし、たとえば次のように使用しようとすると:
public class User {
private int id;
private String username;
public User() { }
public User(int id, String username) {
this.id = id;
this.username = username;
}
}
Memory memory = new Memory();
List<User> users = new ArrayList<User>();
// add users
memory.set("users", users);
// now get the users back
List<User> copy = memory.get("users", User.class);
Gson は、Users ではなく StringMap の ArrayList を返します。
これは明らかに私が使用しているジェネリックと関係がありますが、それを回避する方法はありますか?
ありがとう。