메소드/생성자 참조는 일반적으로 람다를 사용하는 것보다 더 간결하고 가독성이 높아지므로, 이를 사용하는 것이 좋습니다.
드물게 어떤 종류의 함수인지 더 구체적으로 설명하기위해 람다를 유지하는게 괜찮을 수도 있습니다.
마찬가지로 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.