Olá,

Bom, já faz quase um ano que escrevi dois posts sobre java 7, um sobre arquivos e outro sobre switch e catch multiplos. Hoje o post é sobre o diamante <>, o operador.

O uso desse operador economiza alguns toques no teclado, brincadeira, na verdade elimina uma redundância na parametrização de tipos.

Antes era assim:

List<String> lista = new ArrayList<String>();
Map<Integer, Pessoa> map = new TreeMap<Integer, Pessoa>();

Agora pode ficar assim:

List<String> lista = new ArrayList<>();
Map<Integer, Pessoa> map = new TreeMap<>();

Vamos economizar digitação, mas não economize em usar o <>,  é sempre bom por o <> para evitar alguns erros.

Veja que no exemplo abaixo que se omitimos o diamante o  compilador não reclama, mas tem um erro conceitual pois queremos uma variável do tipo Map<Integer, String>

Map<Integer, Pessoa> map1 = new TreeMap<>();
map1.put(0, new PessoaFisica());
Map<Integer, String> outroMap = new TreeMap(map);

Com o uso do diamante o compilador não aceita a declaração:

Map<Integer, Pessoa> map1 = new TreeMap<>();
map1.put(0, new PessoaFisica());
Map<Integer, String> outroMap = new TreeMap<>(map);

Os exemplos abaixo também são aceitos, mas para mim o melhor mesmo é parametrizar o tipo correto.

List<?> list1 = new ArrayList<>();
List list2 = new ArrayList<>();
List<?> list3 = new ArrayList();

Se a List é declaração com ?, o compilador entende que é uma lista de Object.

É possivel usar extends e o super também.

Map<Integer, ? extends Pessoa > map4 = new TreeMap<>();
Map<Integer, ? super Pessoa > map5 = new TreeMap<>();

Nesse link tem um exemplo de teste do JDK

O Eclipse Juno já completa diretamente com <> com o uso de ctrl + espaço se tiver configurado para trabalhar com a sintaxe Java 7.

até mais,

Roberto

Share


Um comentário

  1. #
    Rodrigo
    setembro 12th, 2012 at 10:32

    Exelente matéria! Gostei muito do site, vo espalhar sobre ele na facul.

    Abrçs!

    Responda a esse comentário

Deixe um comentário