将@SuppressWarnings放在一个涉及Runnable lambda的单行中作为参数?

时间:2017-08-02 20:55:31

标签: java 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")和其他人。将注释放在周围的块/方法/类级别上有效,但它比我想要的更具影响力 - 它是一个有效的解决方法,但没有回答问题。

3 个答案:

答案 0 :(得分:3)

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

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

如果由于任何原因无法或不想这样做:在您的方案中,您可以在违规的本地变量声明之前添加注释:

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

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

答案 1 :(得分:2)

简单。编写不产生警告的代码。

Runnable runnableJava8 = () -> {
    List<String> list = new LinkedList<>();
    list.add("some string");
};

答案 2 :(得分:0)

您可以在较高级别禁止警告。

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

@SuppressWarnings("unchecked") // Here
public class NewMain {

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