Lambdas 대신 메소드 참조를 사용하는게 좋습니다.

 

메소드/생성자 참조는 일반적으로 람다를 사용하는 것보다 더 간결하고 가독성이 높아지므로, 이를 사용하는 것이 좋습니다.

드물게 어떤 종류의 함수인지 더 구체적으로 설명하기위해 람다를 유지하는게 괜찮을 수도 있습니다.

마찬가지로 null 체크는 Objects::isNull 또는 Objects::nonNull 메서드에 대한 참조로 대체할 수 있으며, 타입 캐스팅은 SomeClass.class::cast로 변경할 수 있습니다. 더불어 instanceof는 인스턴스는 SomeClass.class::isInstance로 대체할 수 있습니다.

참고: 이 규칙은 프로젝트의 sonar.java.source의 값이 8보다 낮은 경우(java8) 자동으로 비활성화됩니다.

규칙을 어긴 코드

class A {
  void process(List<A> list) {
    list.stream()
      .filter(a -> a instanceof B)
      .map(a -> (B) a)
      .map(b -> b.<String>getObject())
      .forEach(b -> { System.out.println(b); });
  }
}

class B extends A {
  <T> T getObject() {
    return null;
  }
}

규칙을 준수한 해결책

class A {
  void process(List<A> list) {
    list.stream()
      .filter(B.class::isInstance)
      .map(B.class::cast)
      .map(B::<String>getObject)
      .forEach(System.out::println);
  }
}

class B extends A {
  <T> T getObject() {
    return null;
  }
}

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

원문으로 바로가기

Star This Project