Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何正确使用泛型?_Java_Android_Json_Generics - Fatal编程技术网

Java 如何正确使用泛型?

Java 如何正确使用泛型?,java,android,json,generics,Java,Android,Json,Generics,我基本上是在发出webrequests并接收JSON响应。根据请求,我将JSON请求解析为我创建的对象。无论Im解析成什么样的对象,解析都几乎是一样的。所以我有一堆方法只对不同的对象做相同的工作,我想知道如何用泛型来完成这项工作?这里有一个例子 public static ArrayList<Contact> parseStuff(String responseData) { ArrayList<Person> People = new ArrayList<P

我基本上是在发出webrequests并接收JSON响应。根据请求,我将JSON请求解析为我创建的对象。无论Im解析成什么样的对象,解析都几乎是一样的。所以我有一堆方法只对不同的对象做相同的工作,我想知道如何用泛型来完成这项工作?这里有一个例子

   public static ArrayList<Contact> parseStuff(String responseData) {
ArrayList<Person> People = new ArrayList<Person>();
try {

    JSONArray jsonPeople = new JSONArray(responseData);
    if (!jsonPeople.isNull(0)) {
        for (int i = 0; i < jsonPeople.length(); i++) {
            People.add(new Person(jsonPeople.getJSONObject(i)));
        }

    }

} catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (Exception e) {

}

return People;
publicstaticarraylistparseStuff(字符串响应数据){
ArrayList People=新建ArrayList();
试一试{
JSONArray jsonPeople=新的JSONArray(responseData);
如果(!jsonPeople.isNull(0)){
for(int i=0;i
}你应该看看


其基本思想是,您可以想象您有一些
反序列化器
接口。然后你可以有一个
映射,我建议你用它代替JSON。它确实简化了您的生活。

您可能不想使用泛型。您正在解析多少个不同的对象?解析每个对象的代码是否相同?是的,除了对象不同之外,代码基本相同,因此在我发布的示例中,我有完全相同的方法,除了可以用person对象替换Contact对象。您需要返回多少不同的类类型。每次我运行此方法,只返回一个类类型如果我去掉
反序列化器的
字符串
类型,示例可能会更清楚。我的意图是,
反序列化程序
将F类型的对象反序列化为T类型的对象。如果您有一个异构容器,您将如何执行此操作?GSON如何知道要使用哪个反序列化?您可以将其设置为查看要决定的属性吗?gson必须以类似于我建议的方式实现。(一个类型安全的异构容器是必要的,在调用反序列化方法时指定类型也是必要的)。另外,我想知道gson是否会有问题,因为它被标记为Android。gson为您处理内部事务。你只需要说一句话,比如-“(new Gson()).fromJson(numbersText,PhoneStatus.class)”。我并不是说它对Android不起作用——我是说,开发移动应用程序的人有时会避开第三方库,因为它们很容易避开。虽然从我的快速浏览来看,它似乎并不太重。是的,当开发人员太不情愿时,有时这是一个遗憾——org.json包非常原始,使用适当的json库(Gson、Jackson、json lib)在大多数情况下会大大简化生活。
<T> void put(Class<T> clazz, Deserializer<String, T> deserializer) {
  map.put(clazz, deserializer);
}
<T> T deserialize(Class<T> typeToDeserializeFromJson, String toDeserialize) {
  return typeToDeserializeFromJson.cast(
      deserializers.get(tTDFJ).deserialize(toDeserialize));
}