在哪里将@SuppressWarnings放在涉及可运行 lambda 作为参数的单行中?



我正在尝试弄清楚该怎么做

Executors.newSingleThreadExecutor().submit(new Runnable() {
@Override
@SuppressWarnings("unchecked")
public void run() {
List list = new LinkedList();
list.add("some string"); //without
//`@SuppressWarnings("unchecked")` javac warns about
//`[path to file].java: [path to file].java uses unchecked or unsafe operations.`
}
});
@SuppressWarnings("unchecked")
Runnable runnableJava8 = () -> {
List list = new LinkedList();
list.add("some string");
};
Executors.newSingleThreadExecutor().submit(runnableJava8);

在一行中,例如

@SuppressWarnings("unchecked") //where to put this??
Executors.newSingleThreadExecutor().submit(() -> {
List list = new LinkedList();
list.add("some string");
});

这会导致<identifier> expected以及将@SuppressWarnings放在(){}之前。

我不想修复代码以避免警告,我希望能够使用@SuppressWarnings("PMD.AvoidThrowingRawExceptionTypes")和其他。将注释放在周围的块/方法/类级别上是有效的,但它的影响比我想要的要大 - 这是一个有效的解决方法,但没有问题的答案。

最好的选择是修复它不会触发警告的代码 sl(只需声明

List<String> list = new LinkedList<>();

如果出于任何原因不能或不想这样做:在您的方案中,您可以在有问题的局部变量声明之前添加注释:

Executors.newSingleThreadExecutor().submit(() -> {
@SuppressWarnings("unchecked")
List list = new LinkedList();
list.add("some string");
});

我能想到的唯一另一种选择是将注释放在周围的类级别(所有这些代码都添加到的级别(。但我强烈反对这样做,你应该希望在同一类的其他地方被警告这种警告。

您可以在更高级别禁止显示警告。

在函数或类定义之前添加@SuppressWarnings("unchecked")以在整个过程中应用抑制。

@SuppressWarnings("unchecked") // Here
public class NewMain {
@SuppressWarnings("unchecked") // Or here
public static void main(String[] args) {

最新更新