1

我正在尝试使用JSON-B API从文件中反序列化 json

这是代码

public List<User> getUsers(String file) {
    InputStream is = getResourceAsStream(file);
    return JsonbBuilder.create().fromJson(is, new ArrayList<User>(){}.getClass().getGenericSuperclass());
}

它按预期工作。

我试图概括这种方法而不是硬编码User,但它似乎不起作用

public static <T> List<T> getFromSource(String file, Class<T> t) {
 InputStream is = getResourceAsStream(file);
 return getJsonb().fromJson(is, t.getGenericSuperclass());
}

尝试调用上述方法

List<User> users = getFromSource("users.json", User.class);
User user = user.get(0);

但是,它扔了Exception in thread "main" java.lang.ClassCastException: java.util.HashMap incompatible with User 所以,看起来它是一个List<HashMap>尽管List<User>

4

1 回答 1

1

在您的工作方法中,类型是:

new ArrayList<User>(){}.getClass().getGenericSuperclass()

但是您传递给您的getFromSource()方法的内容实际上是:

User.class.getGenericSuperclass()

要解决此问题,您需要像这样更新传入的参数:

List<User> users = getFromSource("users.json", new ArrayList<User>(){}.getClass());
于 2020-05-21T16:43:43.783 回答