Before Java 8, the only way to partially support closures in Java was by using anonymous inner classes. Java 8 introduced lambdas, which are significantly more readable and should be used instead.
This rule is automatically disabled when the project’s sonar.java.source
is lower than 8
, as lambda expressions were
introduced in Java 8.
myCollection.stream().map(new Function<String,String>() { // Noncompliant, use a lambda expression instead @Override public String apply(String input) { return new StringBuilder(input).reverse().toString(); } }) ...
myCollection.stream() .map(input -> new StringBuilder(input).reverse().toString()) // Compliant ...
Predicate<String> isEmpty = new Predicate<String>() { // Noncompliant, use a lambda expression instead @Override public boolean test(String myString) { return myString.isEmpty(); } };
Predicate<String> isEmpty = myString -> myString.isEmpty(); // Compliant