在编译时获取注释的泛型类型的名称

时间:2018-02-14 15:43:17

标签: java generics gson

考虑这个通用类:

public class ListHolder<T> {
  private List<T> objects;
  [...] // non relevant fields
}

我正在使用Gson从REST api反序列化JSON响应。 API中的所有对象列表如下所示:

{"clients":[{"id":6493557,"name":"test", [..]}, {"id":6493557, 
[..]}]}

{"users":[{"id":6493557,"name":"test", [..]}, {"id":6493557, 
[..]}]}

问题在于虽然响应的结构相同,但启动列表的关键字具有域对象的名称。 Gson使用字段名称作为关键字,或使用可选的@SerializedName注释,但我不知道如何在编译时获取T的名称。

我知道由于类型擦除而无法在运行时获取它,但是注释需要编译时常量,并且编译器在编译时确实拥有此信息。

我想使用ListHolder<Client>ListHolder<User>,如果可以的话,这会有效:

public class ListHolder<T> {
  @SerializedName(nameof(T).toLowerCase() + "s")
  private List<T> objects;
  [...] // non relevant fields
}

nameof()是否存在?有没有其他方法可以解决这个问题? 我可以通过TypeAdapter和自定义反序列化来解决这个问题,但我觉得它不会很好。

0 个答案:

没有答案