gpt4 book ai didi

Android AsyncTask 上的 Java 泛型

转载 作者:搜寻专家 更新时间:2023-11-01 07:39:40 25 4
gpt4 key购买 nike

对于一个 Android 项目,我有许多响应任务需要异步运行。这些任务的区别仅在于它们生成的类的类型。我是 Java 泛型的新手,所以我很难用泛型 T 或 ClassT 替换 News.class(仍在解决差异)有人可以指出我如何正确地考虑这一点吗?

private class AcquireResponseTask<T> extends AsyncTask<RestClient, Void, T> 
{
protected void onPostExecute(T news)
{
process(news);
}

@Override
protected T doInBackground(RestClient... rc)
{

return (T) DataToObject.acquireResponse(rc[0],
News.class);
}
}

最佳答案

这是似乎有效的过程。对于我有的任何请求,其中响应将是 JSON 数据,我希望 GSON 检索数据并将其解析为 Java 类对象 - 创建一个类型为“表示为 Java 类的 JSON 数据”的新 AcquireResponseTask 类类型和处理函数对象来处理具体细节。

public interface ProcessResponse<T>
{
void process(T response);
}

public class AcquireResponseTask<T> extends AsyncTask<RestClient, Void, T>
{
private Class<T> type;
private ProcessResponse<T> func;

public AcquireResponseTask(Class<T> classType, ProcessResponse<T> f)
{
type = classType;
func = f;
}

protected void onPostExecute(T response)
{
func.process(response);
}

@Override
protected T doInBackground(RestClient... rc)
{
return (T) JSONToJava.acquireResponse(rc[0],
type);
}
}

我现在为每种数据类型提供以下代码,而不是为每种数据类型多次编写上述代码:

class TopicsResponseProcessor implements ProcessResponse<Topics>
{
public void process(Topics response)
{
createTopicsList(response);
}

}

new AcquireResponseTask<Topics>(Topics.class,TopicsResponseProcessor ()).execute(UrlBuilder.getTopics());

关于Android AsyncTask 上的 Java 泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5735320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com