Boa tarde, após ver várias aulas do curso ainda estou com dúvidas sobre Generics, Qual a vantagem de utilizar? Qual a desvantagem? Quando utilizar? Algum material que possam recomendar para leitura?
Boa tarde!
Rodrigo
Boa tarde, após ver várias aulas do curso ainda estou com dúvidas sobre Generics, Qual a vantagem de utilizar? Qual a desvantagem? Quando utilizar? Algum material que possam recomendar para leitura?
Boa tarde!
Rodrigo
Olá, Rodrigo.
Generics é uma feature sensacional e te ajuda quando você quer trabalhar com tipos "dinâmicos" em linguagem de tipagem estática.
Acho que o exemplo mais claro que eu vejo é de DAOs (Data Access Object). Imagina que você vai ter classes que fazem acesso aos dados do seu sistema. Independente de ser Cliente
, Produto
, Aluno
ou qualquer outra classe a buscar, você precisa: Inserir, Ler, Atualizar e Remover. Você pode então criar uma interface para essas classes que vão manipular os dados. Mas, o método inserir
recebe que tipo por parâmetro? E o que o ler
retorna? Com generics isso fica fácil.
interface Dao<T> {
public T buscarTodos();
public void inserir(T dado);
}
class ClienteDao implements Dao<Cliente> {
public Cliente buscarTodos() { ... }
public void inserir(Cliente dado) { ... }
}
Não sou desenvolvedor Java, então talvez alguém chegue com uma resposta um pouco mais completa, mas basicamente é isso.
Boa tarde Rodrigo,
Uma das vantagens no meu ponto de vista é reaproveitar código, vou te dar um exemplo de como uso.
Em meu projetos eu crio sempre uma interface com o nome ServiceCrud:
**
public interface ServiceCrud <T,I> {
public void save(T save);
public void delete(T delete);
public List<T> listarTudo();
public T pegarPorId(G id);
}
vamos supor que eu tenha uma classe Pessoa e uma serviço que traz as informações do banco, no meu PessoaService eu implemento essa interface algo assim:
public class PessoaService implements ServiceCrud<T,G>{...}
no caso do T eu passo o Objeto pessoa, e no G eu passo o ID da minha classe (entidade), então tenho sou obrigado a implementar os métodos que defini em minha interface ficaria:
**
public class PessoaService implements ServiceCrud<Pessoa, Long>{
@Override
public void save(Pessoa save){
}
@Override
public void delete(Pessoa delete){
}
@Override
public List<Pessoa> listarTudo(){
return pessoaList;
}
@Override
public T pegarPorId(Long id);
return pessoaPorId(id);
}
perceba que o "T" foi substituído pelo meu objeto (entidade) "Pessoa" e o "G" pelo tipo do ID um long, se tiver 100 serviços no meu projeto, eu não corro o risco de esquecer de implementar um desses métodos, e diminui um pouco a reescrita, espero que tenha conseguido te dar uma ideia, esse é o jeito que mais uso generics