Vantagens das Referências para Métodos
Concisão: Referências para métodos são mais concisas que lambdas.
Exemplo: Incrementar valor em um Map usando merge:Lambda: (count, incr) -> count + incr
Referência para método: Integer::sum
Redução de Boilerplate
Remoção de Parâmetros Inúteis: Parâmetros como count e incr são eliminados.
Exemplo:
map.merge(key, 1, Integer::sum);
Uso Eficiente de Referências para Métodos
- Documentação Útil em Lambdas: Em alguns casos, nomes de parâmetros em lambdas podem fornecer documentação útil.
- Conversão de Lambdas para Métodos: Se um lambda for muito complexo, extrair o código para um método separado e usar a referência para esse método.
IDEs e Referências para Métodos
- Sugestões de IDE: IDEs frequentemente sugerem substituição de lambdas por referências para métodos.
- Aceitação das Sugestões: Geralmente, aceite as sugestões, mas avalie caso a caso.
Exceções e Considerações
- Lambdas mais Concisos: Às vezes, lambdas são mais concisos que referências para métodos.
- Exemplo com Classe:
- Referência para método: GoshThisClassNameIsHumongous::action
- Lambda: () -> action()
- Função Identidade: Function.identity() vs. x -> x
Tipos de Referências para Métodos
- Estática: Integer::parseInt (lambda: str -> Integer.parseInt(str))
- Limitada: Instant.now()::isAfter (lambda: t -> Instant.now().isAfter(t))
- Ilimitada: String::toLowerCase (lambda: str -> str.toLowerCase())
- Construtor de Classe: TreeMap::new (lambda: () -> new TreeMap)
- Construtor de Array: int[]::new (lambda: len -> new int[len])
Conclusão
Preferência pelas Referências para Métodos: Use referências para métodos quando forem mais curtas e claras que lambdas.
Uso de Lambdas: Prefira lambdas se eles forem mais concisos ou se fornecerem melhor documentação.
Top comments (0)