1

我正在写一个帮助功能。getList将从某处获取序列化数据,并将其反序列化。

getList 总是返回一个列表。用户将指定元素的类型。预期的用法是这样的:

List<Asset> l1 = getList("Asset"); //warning Unchecked assignment is fine
List<Store> l2 = getList("Store");
//or 
List<Asset> l1 = getList(Asset.class);
List<Store> l2 = getList(Store.class);
//or 
List<Asset> l1 = getList<Asset>();
List<Store> l2 = getList<Store>();

我将如何修复以下实现?它无法编译,因为 className 是一个变量,而 List<> 需要一个类。

public static List getList(String className)
{
    Genson genson = new Genson();
    String data = ...
    List l= genson.deserialize(data, List<className>);
                                     ~~~~~~~~~~~~~~~
    return l;
}
4

1 回答 1

0

在http://genson.io/GettingStarted上有一个 Geson 的入门指南。这有以下泛型类型的示例:

List<Person> persons = genson.deserialize(json, new GenericType<List<Person>>(){});

如果要将列表元素的类型传递给方法,可以引入类型参数:

public static <T> List<T> getList(String json, Class<T> clazz) {
    Genson genson = new Genson();
    List<T> list = genson.deserialize(json, new GenericType<List<T>>(){});
    return list;
}

使用该方法的示例如下所示:

public static void main(String[] args) {
    List<String> stringList = getList("[ \"element1\", \"element2\" ]", String.class);
    System.out.println(stringList);

    List<Integer> integerList = getList("[ 1, 2, 3 ]", Integer.class);
    System.out.println(integerList);
}

这将产生以下输出:

[element1, element2]
[1, 2, 3]
于 2021-08-28T11:30:37.697 回答