Pular para o conteúdo principal
Módulo 6 · Lição 2 de 212/14 no curso~15 min
Lições do módulo (2/2)

Genéricos em Java

Genéricos (Tipos Genéricos) foram introduzidos em Java para permitir que classes, interfaces e métodos operem em diferentes tipos como parâmetros. Isso garante a segurança do tipo em tempo de compilação e evita conversões explícitas caras em tempo de execução.

Aulas genéricas

Uma classe genérica é definida usando colchetes angulares <T> onde T atua como um espaço reservado para um tipo que será especificado quando a classe for instanciada.

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

Ao criar um objeto Box, especificamos o tipo real:

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

Métodos Genéricos

Você pode definir um único método genérico que pode aceitar diferentes parâmetros de tipo. O parâmetro type é colocado antes do tipo de retorno do método.

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

Curingas e tipos locais

Podemos restringir os tipos aceitos por um genérico usando a palavra-chave extends (limite superior) para aceitar um tipo específico ou suas subclasses.

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

Experimente você mesmo

Exercício#java.m6.l2.e1
Tentativas: 0Carregando…

Complete a classe genérica Box definindo o getter getValue() que retorna T e o setter setValue(T value) que define o valor da variável privada.

Carregando editor…
Mostrar dica

Escreva os métodos com a assinatura correta usando o parâmetro de tipo genérico `T`.

Solução disponível após 3 tentativas

Exercício#java.m6.l2.e2
Tentativas: 0Carregando…

Crie um método genérico estático printArray que pega um array do tipo T[] chamado array e imprime cada elemento usando um loop for-each.

Carregando editor…
Mostrar dica

O parâmetro de tipo `<T>` deve ser colocado imediatamente após `static` e antes do tipo de retorno `void`.

Solução disponível após 3 tentativas

Exercício#java.m6.l2.e3
Tentativas: 0Carregando…

Crie uma classe estática StringContainer que implemente a interface Container parametrizada com String. Defina um construtor que receba um parâmetro String e implemente o método getItem().

Carregando editor…
Mostrar dica

Substitua o tipo genérico `T` por `String` na assinatura da classe e no tipo de retorno de `getItem()`.

Solução disponível após 3 tentativas