Muito se fala sobre a verbosidade de Java, mas tirando proveito do import static
é possível escrever código bem limpo.
Considere o código abaixo:
import static java.lang.System.out;
import static java.util.List.of;
import static java.util.stream.Collectors.groupingBy;
enum Role { MANAGER, DEVELOPER }
class Employee {
public final String name;
public final Role role;
Employee(final String name, final Role role) {
this.name = name;
this.role = role;
}
@Override
public String toString() {
return String.format("%s (%s)", this.name, this.role);
}
}
public class Main {
public static void main(String[] args) {
var persons = of(
new Employee("João", Role.MANAGER),
new Employee("Paulo", Role.DEVELOPER),
new Employee("Maria", Role.MANAGER),
new Employee("Marta", Role.DEVELOPER)
);
persons
.stream()
.collect(groupingBy(e -> e.role))
.forEach((role, list) -> out.printf("List of %s: %s\n", role, list));
}
}
E aqui um trecho sem o import static
:
import java.util.List;
import java.util.stream.Collectors;
/* ... */
persons
.stream()
.collect(Collectors.groupingBy(e -> e.role))
.forEach((role, list) -> System.out.printf("List of %s: %s\n", role, list));
É um exemplo bobo, mas acredito que pode fazer maior diferença em situações mais complexas.
Então, com base na sua experiência, fica a pergunta do titulo.
Acrescento o seguinte:
- Não estou considerando o uso static-import-on-demand (exemplo abaixo), que acho que pode prejudicar o entendimento do código
// Prática ruim
import static java.lang.System.*;
import static java.util.List.*;
import static java.util.stream.Collectors.*;
- Além da sua opinião pessoal, o que o code style da sua empresa diz?