DEV Community

Exemplo simples de genérico

O programa apresentado ilustra a criação e uso de classes genéricas. Ele define duas classes principais:

Gen:

  • Classe genérica que usa o parâmetro de tipo T.
  • T é um espaço reservado para o tipo real que será substituído ao criar um objeto da classe.

Características:

  • Armazena um objeto do tipo T.
  • Fornece um construtor que aceita um objeto do tipo T.
  • Implementa métodos para retornar (getob) e exibir (showType) o tipo armazenado
class Gen<T> {
    T ob; // Objeto do tipo T

    // Construtor recebe um objeto do tipo T
    Gen(T o) {
        ob = o;
    }

    // Retorna o objeto
    T getob() {
        return ob;
    }

    // Mostra o tipo do objeto armazenado
    void showType() {
        System.out.println("Type of T is " + ob.getClass().getName());
    }
}

Enter fullscreen mode Exit fullscreen mode

GenDemo:

  • Demonstra como instanciar e usar a classe Gen com tipos diferentes.
  • Exemplo com Integer e String.
class GenDemo {
    public static void main(String args[]) {
        // Gen com Integer
        Gen<Integer> iOb = new Gen<>(88); 
        iOb.showType(); // Mostra o tipo: Integer
        System.out.println("value: " + iOb.getob());

        // Gen com String
        Gen<String> strOb = new Gen<>("Generics Test");
        strOb.showType(); // Mostra o tipo: String
        System.out.println("value: " + strOb.getob());
    }
}

Enter fullscreen mode Exit fullscreen mode

Saída do programa:

Type of T is java.lang.Integer
value: 88
Type of T is java.lang.String
value: Generics Test

Enter fullscreen mode Exit fullscreen mode

Análise Detalhada:
Uso de :
T é um parâmetro de tipo que pode ser substituído por qualquer tipo real (como Integer ou String).
O parâmetro é especificado entre < > na declaração da classe e nos métodos que usam T.

Verificação de tipos em tempo de compilação:
Um objeto Gen não pode ser atribuído a Gen, garantindo a segurança de tipos.

Autoboxing:
Java automaticamente encapsula valores primitivos (como int) em objetos correspondentes (Integer), como no caso Gen(88).

Método showType:
Exibe o tipo real armazenado chamando getClass().getName() no objeto encapsulado.

Substituição de T:
Quando Gen é usado, todas as referências a T são substituídas por Integer. Para Gen, o mesmo acontece com String.

Erasure (Apagamento de Tipos):
Internamente, o compilador remove as informações genéricas, substituindo-as pelas coerções necessárias, garantindo que uma única versão da classe Gen seja usada para diferentes tipos.

Benefícios dos Genéricos:

  • Segurança de Tipos: Erros como atribuir um Double a um Integer são evitados.
  • Código Reutilizável: A mesma classe pode ser usada com diferentes tipos, sem a necessidade de criar implementações específicas.

Top comments (0)