DEV Community

Inferência de Tipos com o Operador Losango

1. Introdução ao Operador Losango (Diamond Operator)

  • Introduzido no JDK 7 para reduzir a verbosidade ao criar instâncias de classes genéricas.
  • Permite que o compilador infira os tipos genéricos a partir do contexto, eliminando a necessidade de repetir os argumentos de tipo.

2. Exemplo de Declaração Antes do JDK 7

// Classe genérica com dois tipos
class TwoGen<T, V> {
    T ob1;
    V ob2;

    TwoGen(T o1, V o2) {
        ob1 = o1;
        ob2 = o2;
    }
}

// Criação de uma instância antes do JDK 7
TwoGen<Integer, String> tgOb = new TwoGen<Integer, String>(42, "testing");

Enter fullscreen mode Exit fullscreen mode

Desvantagem: Os tipos genéricos precisam ser repetidos tanto na declaração quanto na criação da instância.

. Uso do Operador Losango no JDK 7+

// Criação de uma instância usando o operador losango
TwoGen<Integer, String> tgOb = new TwoGen<>(42, "testing");

Enter fullscreen mode Exit fullscreen mode

O operador <> solicita ao compilador que infira os argumentos de tipo com base na declaração da variável (TwoGen).

4. Forma Geral
Sintaxe geral para criar uma instância de uma classe genérica:

nome-classe<lista-arg-tipo> nome-var = new nome-classe<>(lista-arg-cons);

Enter fullscreen mode Exit fullscreen mode

Exemplo:

TwoGen<Double, Boolean> example = new TwoGen<>(3.14, true);
Enter fullscreen mode Exit fullscreen mode

5. Inferência em Métodos
A inferência de tipos também funciona para métodos que recebem classes genéricas como parâmetro.
Exemplo:

// Adicionado à classe TwoGen
boolean isSame(TwoGen<T, V> o) {
    return ob1 == o.ob1 && ob2 == o.ob2;
}

// Chamando o método usando o operador losango
if (tgOb.isSame(new TwoGen<>(42, "testing"))) {
    System.out.println("Same");
}

Enter fullscreen mode Exit fullscreen mode

Os tipos do parâmetro new TwoGen<>(...) são inferidos automaticamente.

6. Benefícios do Operador Losango
Redução de verbosidade: Especialmente útil para classes genéricas com muitos parâmetros de tipo.
Legibilidade: Simplifica declarações complexas.

7. Compatibilidade
O operador losango não funciona em versões do Java anteriores ao JDK 7.
Exemplos em livros e códigos antigos usam a sintaxe completa para manter a compatibilidade com todos os compiladores Java que suportam genéricos.

8. Boas Práticas
Use o operador losango em projetos com suporte ao JDK 7+ para otimizar e tornar o código mais legível.
Prefira a sintaxe completa em exemplos de aprendizado ou projetos legados para maior clareza.

Top comments (0)