wellington7:
Saquei, mas pq tem q colocar o 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.
É 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 antes do tipo de retorno (Map ) e depois da restrição de visibilidade (public).
Se você não colocá-lo aí, pode colocá-lo na assinatura da classe, assim:
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:
public Map<V, K> returnNewMap(Map<K,V> in){
}
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.