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());
}
}
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());
}
}
Saída do programa:
Type of T is java.lang.Integer
value: 88
Type of T is java.lang.String
value: Generics Test
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)