Java 如何解决编译器警告问题
我有一个编译器警告:对上述代码使用未检查或不安全的操作Java 如何解决编译器警告问题,java,android,android-room,Java,Android,Android Room,我有一个编译器警告:对上述代码使用未检查或不安全的操作 newinsertalltask(essenceDao).execute(essenceList) 但是我不知道为什么,我试着用-Xlint参数运行,没有更多的信息 代码有效,但警告仍然存在 希望你能帮忙 整个任务: 公共静态类DeleteAllTask扩展了AsyncTask{ 私人决赛精华道精华道; 私人最终名单精华; DeleteAllTask(EssenceDao EssenceDao,列表){ this.essenceDao=e
newinsertalltask(essenceDao).execute(essenceList)
但是我不知道为什么,我试着用-Xlint参数运行,没有更多的信息
代码有效,但警告仍然存在
希望你能帮忙
整个任务:
公共静态类DeleteAllTask扩展了AsyncTask{
私人决赛精华道精华道;
私人最终名单精华;
DeleteAllTask(EssenceDao EssenceDao,列表){
this.essenceDao=essenceDao;
this.essenceList=列表;
}
@凌驾
受保护的空位背景(空位…空位){
essenceDao.deleteAllEssence();
返回null;
}
@凌驾
受保护的void onPostExecute(void避免){
super.onPostExecute(避免);
如果(essenceList!=null){
//插入新列表
新建InsertAllTask(essenceDao).execute(essenceList);
}
}
}
InsertTask:
公共静态类InsertAllTask扩展了AsyncTask{
私人决赛精华道精华道;
插入任务(EssenceDao EssenceDao){
this.essenceDao=essenceDao;
}
@凌驾
@安全变量
受保护的最终虚空背景(列表…精华){
插入(essences[0]);
返回null;
}
}
由于您试图在不修复警告源的情况下抑制警告(-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
javac TestUnsafe.java-Xlint
返回一个空的编译日志
与我们分享一个最小的可复制示例,以找到正确的注释或修复它 类
InsertAllTask
是泛型的吗?也许这是离题的,但你能澄清一下吗?使用AsyncTask是你的优势(你必须维护传统,你没有时间进行重构之类的),或者你愿意接受其他将执行切换到后台的方法,但只是不知道它们是什么?你用@SafeVarargs
标记了doInBackground
,但你调用的是继承的execute
方法,它显然没有注释。我不明白你的反应。我不建议删除现有的注释。我说继承的execute
方法没有它。由于该方法超出了您的职责范围,无法重写,因此您对此无能为力。因为他说,整个类都不赞成,所以Android开发人员甚至不太可能解决这个问题。可能会有一个解决方案。您可以实现AsyncTask
,而不是实现AsyncTask
并使用所有参数,例如doInBackground(Essence…essences){essenceDao.insertEssence(Arrays.asList(essences));返回null;}
。但是,调用方还需要传递一个数组,即newinsertalltask(essenceDao).execute(essenceList.toArray(new Essential[0])代码>我不想用静默命令抑制警告。我想修改我的代码。但是,感谢您,帮助者请您在github存储库中复制您的警告,以消除此警告:D?
public class TestUnsafe {
@SuppressWarnings({"unused", "rawtypes"})
public static void main(String[] args) {
List myList = new ArrayList();
}
}