Article image
CAUE SANTOS
CAUE SANTOS22/06/2023 18:27
Compartilhe

Entendendo a vantagem dos Generics em Java

    Olá, pessoal!

    Estudando estrutura de dados em Java e me deparei com a declaração de generic types. Não entendi de primeira qual a vantagem de usar essa estrutura nos códigos, então tirei um tempo para pesquisar mais sobre o assunto.

    Tipagem de dados em Java

    Primeiro ponto a se levar em consideração é que Java é uma linguagem fortemente tipada, ou seja, todas as variáveis tem seus

    tipos definidos no momento da declaração, assim como métodos têm seus retornos determinados no momento em que são escritos. Sendo assim, o método abaixo, por exemplo, só poderia aceitar parametrod do tipo String:

    public class Exemplo {
    
      public static void exibeArray(String[] array){
          for (String elemento : array) {
              System.out.println(elemento);
          }
      }
    }
    

    Mas e se precisarmos imprimir um array com dados do tipo int? Se passarmos um array de inteiros como parametro no método exibeArray teremos um erro de compilação.

    Para contornar o problema poderíamos nos valer do pilar Polimorfismo da orientação a objetos e deixar nossa classe da seguinte maneira:

    public class Exemplo {
    
      public static void exibeArray(String[] array){
          for (String elemento : array) {
              System.out.println(elemento);
          }
      }
    
      public static void exibeArray(int[] array){
          for (int elemento : array) {
              System.out.println(elemento);
          }
      }
    }
    

    Mas ainda assim não é uma solução excelente. Imagine que após um ano um novo desenvolvedor utilize essa classe Exemplo precise que ela imprima um array de double. E depois de 6 meses um outro desenvolvedor utilize ela para imprimir um array de objetos de uma nova classe que ele criou. Olha o trabalho que estamos dando para a manutenção do nosso sistema a longo prazo!

    Generics

    É pensando em uma solução para esse tipo de situação que utilizamos os generics. Como o próprio nome indica, a ideia é declarar tipos genéricos, para garantirmos flexibilidade e reutilização para nosso código nas próximas vezes que nossas classes e métodos forem utilizados. Perceba como fica nossa classe Exemplo refatorada:

    public class Exemplo {
    
      public static <T> void exibeArray(T[] array){
          for (T elemento : array) {
              System.out.println(elemento);
          }
      }
    }
    

    Muito mais elegante, não é?

    Mas atenção! Quando utilizamos tipos genéricos não podemos utilizar os tipos primitivos (int, boolean, double...). Isso porque métodos genéicos só aceitam tipos referenciáveis. Então quando for utilizar um método genérico, não esquece de declarar suas variáveis com as classes empacotadoras de tipo (Integer, Boolean, Double...).

    Compartilhe
    Comentários (0)