如何使用Generic AsyncTask摆脱/修复警告

时间:2015-11-17 21:27:54

标签: android generics android-asynctask

我试图以下列方式在抽象片段中使用带有泛型的AsyncTask:

protected abstract void doSomething(T item);

...

public void test(int position)
{
    AsyncTask<T, Void, Void> exampleTask = new AsyncTask<T, Void, Void>()
    {
        @Override
        protected Void doInBackground(T... params)
        {
            doSomething(params[0]);

            return null;
        }
    };

    exampleTask.execute(mAdapter.get(position));
}

其中mAdapter也使用泛型,get定义为:

public T get(int position)
{
    return mItemList.get(position);
}

这里的想法是我想使用通用适配器和通用asynctask来执行公共调用(并且具有扩展此抽象片段的片段实现doSomething)。

这完全取决于我的测试显示的内容,但它显示了两个警告,让我相信我没有做正确的事情&#34;正确&#34;方式。

首先,doInBackground出现以下警告:

参数化varag类型可能造成的堆污染。此检查报告所有具有可变arity的方法,可以注释为@SafeVarags。 @SafeVarags注释禁止在调用站点创建有关参数化数组的未经检查的警告。

其次,exampleTask.execute出现以下警告:

为varargs参数创建未经检查的泛型数组。表示编译器发出未经检查警告的位置,例如:

void f(HashMap) {
    map.put("key", "value");
}

我想删除警告并确保我正确地执行此操作,是否有任何想法?

0 个答案:

没有答案