java - 如何解决..抽象类?泛型?

标签 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 {
        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;
}

稍后您可以获得 ArrayListHashmap 的结果,如下所示;

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/

相关文章:

java - 强制终止我不是用 Java 编写的线程

java - Spring 运行的单元测试作为组失败,但单独通过

java - 下载完成后自动打开文件PDF

java - 如何使用 ListIterator 编辑列表内容

java.lang.ClassCastException : java. util.Arrays$ArrayList 无法转换为 java.lang.Integer

java - 在 Eclipse 中选择空的远程系统类型列表

Java:为什么泛型类不强制相同类型?

generics - 用于Rust中多个泛型转换的GADT

c# - 通用列表方法问题

java - 如何在indexOf中使用int[][]之外的列表?