我试图以下列方式在抽象片段中使用带有泛型的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");
}
我想删除警告并确保我正确地执行此操作,是否有任何想法?