[Resolvido] Dúvida com a linguagem

:smiley:
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> 
{
}

Agradeço desde já a boa vontade de vocês. :smiley:

Olá,pelo que entendi(me corrijam se estiver errado) os marcadores ‘<>’ servem para indicar que aquele objeto List vai ser de um só determinado tipo.

Exemplo:

List … todos os objetos dessa lista vão ser da classe contato.

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).

Isto se chama Generics, como você esta começando recomendo a leitura do livro Use a Cabeça Java.
Um tutorial sobre Generics: http://www.plugmasters.com.br/sys/materias/864/1/Tipos-gen%E9ricos-em-Java-(Generics)

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&lt;ObjetoQualquer&gt; nomeEstruturaDoObjeto = new ArrayList&lt;ObjetoQualquer&gt;();

Map&lt;Integer, Set&gt;&lt;Integer&gt;&gt; mapOfIntegers = new HashMap&lt;Integer, Set&gt;&lt;Integer&gt;&gt;();

Agora é assim:

List&lt;ObjetoQualquer&gt; nomeEstruturaDoObjeto = new ArrayList&lt;&gt;();

Map&lt;Integer, Set&gt;&lt;Integer&gt;&gt; mapOfIntegers = new HashMap&lt;&gt;();

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>().

Obrigado pessoal, esclareceu já minha dúvida, e obrigado pela rapidez! :smiley:

[quote=fbl.lucas]Isto se chama Generics, como você esta começando recomendo a leitura do livro Use a Cabeça Java.
Um tutorial sobre Generics: http://www.plugmasters.com.br/sys/materias/864/1/Tipos-gen%E9ricos-em-Java-(Generics)[/quote]

Obrigado pela dica…