Java 如何解决。。抽象类?仿制药?

Java 如何解决。。抽象类?仿制药?,java,generics,arraylist,hashmap,abstract-class,Java,Generics,Arraylist,Hashmap,Abstract Class,在我当前的设置中,我有一个集中的助手类,如下所示: @Override protected void onPostExecute(String result) { super.onPostExecute(result); if(task == null) { return; } Gson gson = new GsonBuilder().create(); ResponseJson p = null; try {

在我当前的设置中,我有一个集中的助手类,如下所示:

 @Override
 protected void onPostExecute(String result)
 {
     super.onPostExecute(result);
     if(task == null) {
         return;
     }

    Gson gson = new GsonBuilder().create();
    ResponseJson p = null;
    try {
        p = gson.fromJson(result, ResponseJson.class);
    } catch(JsonSyntaxException e) {
        //Toast.makeText(getApplicationContext(), getApplicationContext().getResources().getString(R.string.toast_sync_completed), Toast.LENGTH_SHORT).show();
        Log.e("", e.getMessage() + " got '" + result + "'");
    }
    Log.i("", p.toString());
    Log.i("", result);

    if(p.status.equals(ResultStatus.SUCCESS.toString())) {
        task.success(p.data);
    } else if (p.status.equals(ResultStatus.FAIL.toString())) {
        task.fail(p.data);
    } else if (p.status.equals(ResultStatus.ERROR.toString())) {
        task.error(p.message);
    } else {
        throw new UnsupportedOperationException();
    }
 }

问题是我想使
ResponseJson
类是动态的,
data
属性是唯一的(有时我需要
ArrayList
有时
HashMap
)用于转换JSON结果。我可以使用泛型或其他方法实现这一点吗?

如果您将
对象设置为
数据的类型

class ResponseJson {
    Object data;
}
稍后,您可以得到如下结果:
ArrayList
Hashmap

if (responseJson.data instanceof ArrayList<?>) {
    ArrayList<String> arrayList = (ArrayList<String>) responseJson.data;
} else if(responseJson.data instanceof HashMap<?, ?>) {
    HashMap<String, String> hashmap = (HashMap<String, String>) responseJson.data;
}
if(responseJson.data instanceof ArrayList){
ArrayList ArrayList=(ArrayList)responseJson.data;
}else if(HashMap的responseJson.data实例){
HashMap HashMap=(HashMap)responseJson.data;
}

由于类型擦除,在运行时无法知道参数化类型。但是,如果您知道类型,您可以执行未经检查的强制转换。

第一个问题是,如果您访问对象的
数据
,您必须能够要求任何抽象行为,以便您可以将此行为考虑到抽象基类中-例如,您是否像
集合
那样遍历数据?如果没有,我就看不出抽象基类有什么意义。如果您添加任何您访问
数据的用例,并向我们展示您使用它执行哪些任务,以更具体地帮助您,那么它可能会有所帮助。onPostExecute返回一些JSON。上面看到的
task
变量是一个i类动态实现,用于处理服务器返回的数据(它直接处理数据结构,而不是json)。当从服务器返回的数据一致时,我没有问题。现在返回的内容之间存在一些差异,我希望在一个地方(我的服务类)处理所有这些内容。我目前正在做的是在每个活动中解析json,并在活动中手动指定gson提要的json类文件。最终结果非常冗长,一点也不枯燥。注意:服务类进行http调用,检查状态代码和所有jazz,并通过gson将返回的JSON加载到一个类中,并将其交给动态实现的
任务
类。是的,但您是否根据内容决定如何处理JSON?如果是,您可能应该从不同的JSON中创建类层次结构的不同对象,并将处理哪些JSON内容的逻辑移到类层次结构的具体类中。但更具体的示例(类似代码)将有助于确定这是否可行!蒂姆的解决方案最终没有我想要的那么优雅,但更不用说冗长了。最终会使用它。