Java 试图将映射传递给AsyncTask,但我得到一个:Type safety:Map的通用数组<;日期,字符串>;是为varargs参数创建的
我正在使用Loader执行一些DB操作,填充一个HashMap,然后用这个HashMap填充一个树映射以对puropse进行排序,但是当我尝试将这个树映射传递给我的AsyncTask时,例如:Java 试图将映射传递给AsyncTask,但我得到一个:Type safety:Map的通用数组<;日期,字符串>;是为varargs参数创建的,java,android,android-asynctask,treemap,Java,Android,Android Asynctask,Treemap,我正在使用Loader执行一些DB操作,填充一个HashMap,然后用这个HashMap填充一个树映射以对puropse进行排序,但是当我尝试将这个树映射传递给我的AsyncTask时,例如: Sorted = new TreeMap<Date,String>(BD); new MagicCall().execute(Sorted); Sorted=newtreemap(BD); 新建MagicCall().execute(已排序); 但是编译器给了我一个警告:类型安全:为v
Sorted = new TreeMap<Date,String>(BD);
new MagicCall().execute(Sorted);
Sorted=newtreemap(BD);
新建MagicCall().execute(已排序);
但是编译器给了我一个警告:类型安全:为varargs参数创建了一个通用的Map数组
这是我的异步任务声明:
private class MagicCall extends AsyncTask<Map<Date,String>, String, String>
私有类MagicCall扩展异步任务
有标题吗 我通过一个变通办法解决了这个问题。 您可以按如下方式声明任务:
private class MagicCall extends AsyncTask<Void, String, String> {
// member
private Map<Date,String> arg = null;
// constructor
public MagicCall(final Map<Date,String> arg) {
this.arg = arg;
}
...
@Override
protected String doInBackground(final Void... args) {
// do stuff on this.arg instead of args
...
}
...
}
通过这种方式,您可以通过构造函数而不是execute()方法传递任务参数。Java不喜欢varargs中的泛型-如果您不喜欢这个警告,请将
TreeMap
包装到一个没有泛型的类中。如果我抑制它,会花费我任何费用吗?除了一行代码和违反类型安全性的可能性之外(你应该可以在那里通过任何类型的地图)不。谢谢,那么我就不必把头撞到墙上了。我会抑制它的!
new MagicCall(Sorted).execute();