Métodos Estáticos

Bom dia!!

Eu ouvi essa semana que métodos estáticos difícilmente devem ser utilizados, por fazerem meio q referencia a programação estruturada.
E atualmente eu utilizo pelo menos um método estático por classe. Normalmente para realizar consulta de uma coleção de objetos, tipo

public static Collection getClientes()

Queria saber se isso é uma boa prática ou não.

Acredito que no seu caso não seria uma boa prática. Métodos estáticos são geralmente utilizados como funções utilitarias. Para a persistência, você poderia utilizar o padrão DAO. De uma pesquisada sobre.

Recomendo evitar utilizar métodos estáticos até que tenha mais intimidade com a linguagem. :wink:

Sendo estático este método não pode ser sobreescrito.

Sendo estático não pode depender do estado interno da classe e, se vc utilizar atributos estáticos para armazenas coisas como a conexão com o banco de dados, estás usando algo como um Singleton de uma forma que pode ser dificil de testar. Nada impede que o seu repositorio seja um objeto com métodos não estáticos e o repositorio em si pode ser acessado por um método estático de outra classe que concentre os seus servicos.

Ex:

Onde MinhaAPI contenha uma referência ao repositorio de clientes de forma estática. Perceba que é importante vc testar o repositorio, estude p JUnit e JMock para isso :wink:

tem material sobre static aqui no GUJ…

http://www.guj.com.br/java.tutorial.artigo.121.1.guj

como o pessoal falou antes, o static eh mais utilizado p/ classes utilitarias. vc tmb pode usar static para facilitar a criacao de uma Fluent Interface. Vai ser mais facil escrever/ler o codigo que vai usar a sua Fluent Interface, pois vc nao irá precisar ficar declarando uma classe antes de usar seus metodos…

por exemplo:

import static fluentSQL.ConsultaSQLImpl.consultar;
consultar().select("nome,", "rua,", "telefone").from("tabela_usuario user")
    .inner("tabela_endereco end").on("end.id = user.id")
        .where("user.id = " + id);