声纳:只包含一个方法的匿名内部类应该成为lambdas

时间:2014-06-23 12:03:36

标签: lambda java-8 sonarqube

这些代码示例:

public abstract class Main {

    public abstract void myMethod();

    public static void main(String[] args) {
        Main main = new Main() {

            @Override
            public void myMethod() {
                // TODO Auto-generated method stub

            }
        };
        main.myMethod();
    }
}

import java.util.Observable;
import java.util.Observer;

public abstract class Main {


    public static void main(String[] args) {
        Observable observable = new Observable();
        observable.addObserver(new Observer() {

            @Override
            public void update(Observable o, Object arg) {
                o.deleteObserver(this);
            }
        });
    }
}

不符合此sonarqube rule

  

只包含一个方法的匿名内部类应该成为   lambdas:让这个匿名的内部类成为一个lambda

我该如何解决?

1 个答案:

答案 0 :(得分:3)

你提出的两个问题确实是由规则引起的误报。 已创建错误票证:https://jira.codehaus.org/browse/SONARJAVA-553https://jira.codehaus.org/browse/SONARJAVA-591

详细介绍一下: 当存在this引用时,不应该引发问题(第二种情况),因为它实际上是不可修复的,我认为此规则应该只应用单个抽象方法接口而不是每个匿名类来解决问题第一个案例。