Как использовать тип generi c в gson typeToken? - PullRequest
0 голосов
/ 28 апреля 2020

Я хочу использовать тип 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() метод?

...