Olá pessoal, estou iniciando programação em Java e até agora conseguir me adaptar muito bem a linguagem, mas existem algumas coisas que ainda tenho dúvida, a mais importante para mim neste momento é saber para que server os marcadores ‘<>’ mas não no contexto de maior e menor e sim nestes casos abaixo:
//Neste caso entre o list e ArrayList
List<ObjetoQualquer> nomeEstruturaDoObjeto = new ArrayList<ObjetoQualquer>();
e
// Minha dúvida é saber para que serve este <>
public class Jogador implements Comparable<Jogador>
{
}
Estas “marcações” são formas de indicar que um objeto irá tratar o tipo especificado entre eles.
De que forma isso acontece.
Bom, a partir do java 1.5, uma grande mudança surgiu, para aproveitar e incrementar o uso de polimorfismo e OO, era a caminhada rumo ao generics.
Generics consiste em criar estruturas que podem receber quaisquer classes, já existentes ou não.
Normalmente, a sintaxe de algo que irá suportar generics é
public interface Generica<T>{}
Quando criamos uma classe que irá implementar esta Generica, precisamos passar qual o tipo de classe que ela irá tratar
public class Classe implements Generica<String>
public class Classe implements Generica<MinhaClasse>
Os melhores exemplos disso (mais comuns, ao menos) são as collections e mapas (List, Map<K, V>, etc).
Note: No Java 7 é possível usar uma sintaxe mais enxuta para a criação dos Objetos de Tipos Genéricos, através da omissão dos tipos, com uma notação que foi apelidada de diamond:
O que antes era assim:
List<ObjetoQualquer> nomeEstruturaDoObjeto = new ArrayList<ObjetoQualquer>();
Map<Integer, Set><Integer>> mapOfIntegers = new HashMap<Integer, Set><Integer>>();
Agora é assim:
List<ObjetoQualquer> nomeEstruturaDoObjeto = new ArrayList<>();
Map<Integer, Set><Integer>> mapOfIntegers = new HashMap<>();
Com essa sintaxe, os parâmetros de tipos usados na construção dos objetos são inferidos a partir dos parâmetros definidos na referência para esse objeto. Ou seja, em uma declaração Tipo<t1, t2, …, tk> ref = new Tipo<>(), o compilador entenderá que new Tipo<>() deverá ser substituído por new Tipo<t1, t2,…, tk>().