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内容的逻辑移到类层次结构的具体类中。但更具体的示例(类似代码)将有助于确定这是否可行!蒂姆的解决方案最终没有我想要的那么优雅,但更不用说冗长了。最终会使用它。