<K,V> Map<K,V>

Fiz o simulado do cd que vem o livro SCJP da Sierra, e tinha um trexo de código mais ou menos assim:
<K,V> Map<K,V>

Li sobre Maps, e só vi utilização dessa classe com uma assinatura parecida como Map<K,V>, onde K é a chave e V é o valor… Mas não entendi o que significa ter mais um <K,V> antes…
Podem me indicar onde encontrar explicação disso?
No livro tb nao lembro de ter visto isso… ainda estou procurando aki…

Hey colega.

Estou estudando através do K&B tbm,
vc pode achar essa assinatura na parte que fala sobre Generics (Criando métodos genéricos)

Com essa declaração na frente do método você pode definir como seraão os elementos, por exemplot:

public <K extends Object, V extends Object> Map<K,V> returnNewMap(Map<K,V> in){...}

Esse código somente aceitará uma coleção cujos elementos Key e Value sejam sub classes de Object (ou seja, todo mundo :slight_smile: ).

espero ter ajudado e não confundido
<><

Saquei, mas pq tem q colocar o <K,V> tanto antes quanto depois do nome do método? Isso que está confuso…
Por exemplo, uso muito o ArrayList, e nunca fiz algo como ArrayList.

[quote=wellington7]Saquei, mas pq tem q colocar o <K,V> tanto antes quanto depois do nome do método? Isso que está confuso…
Por exemplo, uso muito o ArrayList, e nunca fiz algo como ArrayList.[/quote]

É porque você apenas usa uma classe genérica, nunca criou uma classe com método genérico!

Quando se quer que um método de uma classe tenha um tipo genérico, determinado apenas pelo tipo do parâmetro de entrada, coloca-se esse <K, V> antes do tipo de retorno (Map<V,K> ) e depois da restrição de visibilidade (public).

Se você não colocá-lo aí, pode colocá-lo na assinatura da classe, assim:

[code]public Foo {

}
[/code]

Só que, quando for utilizar Foo, você sempre deve declarar seu tipo, assim:

Quando você não declara um tipo genérico nem no começo do método, nem na declaração da classe e tenta fazer algo assim:

[code]public Map<V, K> returnNewMap(Map<K,V> in){

}[/code]

o compilador vai reclamar que K e V não podem ser resolvidos para um tipo, e é verdade pois você nunca os declarou, só está utilizando eles.

isso aí :wink:

Aaaaaaaa tá… :slight_smile: