Java 试图将映射传递给AsyncTask,但我得到一个:Type safety:Map的通用数组<;日期,字符串>;是为varargs参数创建的

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

我正在使用Loader执行一些DB操作,填充一个HashMap,然后用这个HashMap填充一个树映射以对puropse进行排序,但是当我尝试将这个树映射传递给我的AsyncTask时,例如:

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();