Я хочу использовать тип generi c в gson TypeToken, например:
public static <T> T execute(String s) throws SecurityException {
return new Gson().fromJson(s, new TypeToken<T>(){}.getType());
}
public static void main(String[] args) {
String s = "[{\"username\": \"abc\", \"password\": \"abc\"}, {\"username\": \"abc1\", \"password\": \"abc1\"}]";
List<Auth> a1 = new Gson().fromJson(s, new TypeToken<List<Auth>>(){}.getType());
System.out.println(a1);
System.out.println("a1 class: " + a1.get(0).getClass());
List<Auth> a2 = TypeClass.execute(s);
System.out.println(a2);
System.out.println("a2 class: " + a2.get(0).getClass());
}
static class Auth {
private String username;
private String password;
}
, но выдается исключение:
[cn.gitbug.test.TypeClass$Auth@7921b0a2, cn.gitbug.test.TypeClass$Auth@174d20a]
a1 class: class cn.gitbug.test.TypeClass$Auth
[{username=abc, password=abc}, {username=abc1, password=abc1}]
Exception in thread "main" java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to cn.gitbug.test.TypeClass$Auth
at cn.gitbug.test.TypeClass.main(TypeClass.java:22)
, так как мне написать execute()
метод?