Trilhas
/
Java
Java
/
Programa
/
Tipos Genéricos
Ti

Tipos Genéricos em Java

11 exercícios

Sobre Tipos Genéricos

Um tipo genérico é uma classe ou interface genérica parametrizada por tipos. Isso permite que o compilador garanta a segurança de tipos na classe ou na interface.

Considere esta interface Container, que não é genérica:

class Container {
    private Object object;

    public void set(Object object) { this.object = object; }
    public Object get() { return object; }
}

Como ela aceita e retorna tipos Object, funciona com qualquer tipo não primitivo. Porém, isso tem um custo: um trecho de código pode chamar get esperando Integers, enquanto outro chama set adicionando Strings, o que resulta em uma exceção em tempo de execução.

Uma classe genérica e uma interface genérica têm os seguintes formatos:

class ClassName<T1, T2, ..., Tn> { ... }
interface InterfaceName<T1, T2, ..., Tn> { ... }

A seção de parâmetros de tipo, delimitada por sinais de maior e menor (<>) depois do nome da classe ou da interface, especifica os parâmetros de tipo (também chamados de variáveis de tipo) T1, T2, ..., e Tn. Eles podem ser usados dentro do corpo da classe ou da interface para obter segurança de tipos genérica.

Aqui está a versão genérica de Container:

class Container<E> {
    private E object;

    public void set(E object) { this.object = object; }
    public E get() { return object; }
}

Ao criá-la, agora precisamos declarar qual tipo ela guarda, e o compilador vai impor essa restrição:

// empty <> can infer from context
Container<String> stringContainer = new Container<>();
// compiler knows this is a String, so it is allowed
stringContainer.set("Some string");
// no cast needed, compiler knows it is a String
String result = stringContainer.get();
// this causes a compiler error:
stringContainer.set(42);
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Tipos Genéricos