하나의 메소드만 갖는 익명 내부 클래스는 람다식으로 교체돼야 합니다

 

Java 8 이전에는, 클로저를 일부 지원하기위한 유일한 방법은 익명 내부 클래스를 사용하는 것이었습니다. 하지만, 익명 클래스는 구문을 다루기도 어렵고, 불명확해 보입니다.

Java 8부터, 익명 내부 클래스의 대안으로 lambdas식이 추가되었습니다. lambdas는 소스코드의 가독성을 높여주는데 크게 도움이 됩니다.

참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 8보다 낮은 경우(java8) 검사하지 않습니다.

규칙을 어긴 코드

myCollection.stream().map(new Mapper<String,String>() {
  public String map(String input) {
    return new StringBuilder(input).reverse().toString();
  }
});

Predicate<String> isEmpty = new Predicate<String> {
    boolean test(String myString) {
        return myString.isEmpty();
    }
}

규칙을 준수한 해결책

myCollection.stream().map(input -> new StringBuilder(input).reverse().toString());

Predicate<String> isEmpty = myString -> myString.isEmpty();

If you like SONARKUBE, don’t forget to give me a star. :star2:

원문으로 바로가기

Star This Project