首页 > 解决方案 > 如何解决编译器警告

问题描述

我有这个编译器警告:在上面的代码上使用未经检查或不安全的操作

new InsertAllTask(essenceDao).execute(essenceList)

但我不知道为什么,我尝试使用 -Xlint 参数运行,没有更多信息。

代码有效,但警告仍然存在。

希望你能帮忙

整个任务:

public static class DeleteAllTask extends AsyncTask<Void, Void, Void> {
    private final EssenceDao essenceDao;
    private final List<Essence> essenceList;

    DeleteAllTask(EssenceDao essenceDao, List<Essence> list) {
        this.essenceDao = essenceDao;
        this.essenceList = list;
    }

    @Override
    protected Void doInBackground(Void... voids) {
        essenceDao.deleteAllEssence();
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        if (essenceList != null) {
            // Insert new list
            new InsertAllTask(essenceDao).execute(essenceList);
        }
    }
}

插入任务:

public static class InsertAllTask extends AsyncTask<List<Essence>, Void, Void> {
    private final EssenceDao essenceDao;

    InsertAllTask(EssenceDao essenceDao) {
        this.essenceDao = essenceDao;
    }

    @Override
    @SafeVarargs
    protected final Void doInBackground(List<Essence>... essences) {
        essenceDao.insertEssence(essences[0]);
        return null;
    }
}

标签: javaandroidandroid-room

解决方案


由于您试图在(-Xlint)不修复警告源的情况下抑制警告,因此可以将此注释添加到包含不安全代码的方法中:

    @SuppressWarnings({"unused", "rawtypes"})

例子

上面的代码:

    public class TestUnsafe {
      public static void main(String[] args) {
        List myList = new ArrayList();
      }
    }

当我尝试编译时显示这些警告:

javac TestUnsafe.java -Xlint

    TestUnsafe.java:7: warning: [rawtypes] found raw type: List
        List myList = new ArrayList();
        ^
      missing type arguments for generic class List<E>
      where E is a type-variable:
        E extends Object declared in interface List
    TestUnsafe.java:7: warning: [rawtypes] found raw type: ArrayList
        List myList = new ArrayList();
                          ^
      missing type arguments for generic class ArrayList<E>
      where E is a type-variable:
        E extends Object declared in class ArrayList
    2 warnings

但是,使用几个注释:

    public class TestUnsafe {
      @SuppressWarnings({"unused", "rawtypes"})
      public static void main(String[] args) {
        List myList = new ArrayList();
      }
    }

javac TestUnsafe.java -Xlint返回一个空的编译日志。

与我们分享一个最小的可重现示例,以找到正确的注释或修复它!


推荐阅读