0

我有这门课

public final class AsyncTaskManager<T extends AsyncTask<?, ?, ?> & IProgressTrackerTask 
       & ICancelTask> 
....
T mAsyncTask;
....
public void setupTask(T asyncTask) {
    mAsyncTask = asyncTask;
    mAsyncTask.execute();
}
.....

但是上线了

    mAsyncTask.execute();

日食 说:

Type safety: A generic array of capture#4-of ? is created for a varargs parameter
add @SuppressWarnings("unchecked")

我添加了 suppressWarning,但在执行 doInBackgound 期间出现 ClassCastException。
正如这里所说,在执行 AsyncTask 之前必须检查所有类型。
如何解决我的问题 - 使我的类通用并禁用此警告?
非常感谢!

编辑:只是为了澄清如何使用。我有抽象的 AsyncTask:

public abstract class ManagedAsyncTask<T, E, G> extends AsyncTask<T, E, G> 
implements IProgressTrackerTask, ICancelTask {

和正在做实际工作的 AsyncTask:

public class GetTask extends ManagedAsyncTask<Void, Void, SearchResult> {

并在活动中:

mAsyncTaskManager = new AsyncTaskManager<GetTask>(this, this);
mAsyncTaskManager.setupTask(new GetTask());
4

1 回答 1

4

我不太确定它的通用部分,但我认为你得到了那个错误,因为executeAsyncTask 上的方法期望方法的参数作为参数doInBackground。这将是第一个问号的任何类型的数组AsyncTask<?, ?, ?>。如果您不希望在您doInBackground(Void[])null.

execute()这是 AsyncTask 方法的文档。如果您仍然遇到问题,此页面的其他部分对于配置和使用 AsyncTask 非常有帮助:

http://developer.android.com/reference/android/os/AsyncTask.html#execute%28Params...%29

编辑:只是为了澄清一下Void, in(Void[])null应该是参数的任何类型doInBackground。我假设,由于您没有将任何内容传递给执行,因此您使用 Void 作为该参数来指示没有必要的数据。您可能已经以不同的方式实现它,并且需要相应地强制转换为 null。

于 2012-09-12T14:56:10.820 回答