【问题标题】:Android AsyncTask, warning: "Unchecked generics array creation for varargs parameter"Android AsyncTask,警告:“为 varargs 参数创建未经检查的泛型数组”
【发布时间】:2016-05-03 13:23:18
【问题描述】:

如何消除警告?我正在使用的代码:

private void tryNew(List<Something> somethingList){
    new AsyncTask<List<Something>,Void,Void>(){
        @Override
        protected Void doInBackground(List<Something> [] somethingList) {
            //some code
            return null;
        }
    }.execute(somethingList);
}

【问题讨论】:

  • List&lt;Something&gt; 包裹在一个不像class Foo { public List&lt;Something&gt; list; } 这样的通用对象中并使用AsyncTask&lt;Foo, ... - 解决它 - 或者干脆忽略它 - stackoverflow.com/questions/3096708/java-generics-and-varargs 有一些关于它的细节 - 如果您的目标是 19+ 您可以尝试将 @SafeVarargs 添加到 doInBackground 方法
  • 延迟添加,但值得注意的是,虽然将 @SafeVarargs 添加到 doInBackground 是可能的(并且有助于消除相关的警告消息 - Possible heap pollution from paramaterized vararg type),但它不能 i> 删除原来的“unchecked generics”警告,因为你不直接调用doInBackground。你使用new AsyncTask(...).execute()

标签: java android android-asynctask


【解决方案1】:

我遇到了同样的警告,并且可以通过使用我在执行方法的参数上使用的对象来删除它,而无需泛型。 对不起,我的英语不好,但我会尽力解释得更好。

改为以这种方式创建我的 AsyncTask:

new AsyncTask<MyObject<GenericsInsideGenerics>, Void, Void>...

我是这样创建的:

new AsyncTask<MyObject, Void, Void>...

而且效果很好!

【讨论】:

    【解决方案2】:

    如果要删除警告信息,则必须使用 AsyncTask 的指定可变参数。

    private void tryNew(List<Something> somethingList){
        new AsyncTask<Something,Void,Void>(){
            @Override
            protected Void doInBackground(Something.. s) {
                //some code
                return null;
            }
        }.execute(somethingObject1, somethingObject2, somethingObject3);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-03
      • 2013-07-14
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多