在我当前的设置中,我有一个集中的帮助程序类,如下所示:
@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<Something>
其他时候 HashMap<String, String>
)适用于转换我的 JSON 结果。我可以使用泛型或其他方法来实现这一点吗?
最佳答案
如果将Object
设置为data
类型,
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;
}
由于类型删除,参数化类型在运行时无法得知。但如果您知道类型,则可以进行未经检查的强制转换。
关于java - 如何解决..抽象类?泛型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23824684/