代码之家  ›  专栏  ›  技术社区  ›  Rob Stevenson-Leggett

在泛型列表中传递类<t>在Java中?

  •  11
  • Rob Stevenson-Leggett  · 技术社区  · 14 年前

    我有一个从服务读取json的方法,我使用gson进行序列化,并使用类型参数编写了以下方法。

    public T getDeserializedJSON(Class<T> aClass,String url)
    {
        Reader r = getJSONDataAsReader(url);
        Gson gson = new Gson();
        return gson.fromJson(r, aClass);
    }
    

    我正在使用json,它只返回一个类型数组,例如。

    [
     { "prop":"value" }
     { "prop":"value" }
    ]
    

    我有一个Java类,它映射到这个对象,我们称之为MyClass。但是,要使用我的方法,我需要这样做:

    RestClient<ArrayList<MyClass>> restClient = new RestClient<ArrayList<MyClass>>();
    ArrayList<MyClass> results = restClient.getDeserializedJSON(ArrayList<MyClass>.class, url);
    

    但是,我不知道该怎么做。只传递arraylist.class不起作用。

    那么,有没有方法可以去掉类参数,或者如何获取myclass的arraylist的类呢?

    3 回复  |  直到 14 年前
        1
  •  22
  •   Eyal Schneider    14 年前

    您可以使用bozho的解决方案,或者使用以下方法避免创建临时数组列表:

    Class<List<MyClass>> clazz = (Class) List.class;
    

    此解决方案的唯一问题是,必须使用@suppresswarnings(“unchecked”)来取消选中警告。

        2
  •  6
  •   Rob Stevenson-Leggett    14 年前

    作为后续工作,我在gson文档中找到了这个。

    Type listType = new TypeToken<List<String>>() {}.getType();
    

    它解决了安全获取类型的问题,但typetoken类是gson特有的。

        3
  •  5
  •   Bozho    14 年前

    你不能。你必须使用不安全的演员:

    Class<List<MyClass>> clazz = 
       (Class<List<MyClass>>) new ArrayList<MyClass>().getClass();