[SOLVED] :: Retornos em declarações de métodos genéricos ::

Antes de mais nd quero dizer que procurei muito antes de criar este tópico, portanto peço a ajuda de links ou até mesmo esclarecimentos da questão!

public static [color=red] Collection[/color] getMethod(Collection coll){}

Gostaria muito de entender este conceito de limites de retornos, que não acho em lugar algum. Na API não entendi muito sobre.
É isso.
Muito Obrigado a quem puder ajudar!

Minha prova SCJP6 é dia 13/01/2010!
tenso!

hum essa parte eh complicada msm…
mas oque vc não ta entendendo???..
vc ta querendo saber como que funciona o retorno de métodos genéricos???

no exemplo que vc postou vc deve passar uma Collection como argumento no método desde que esta collection implemente a interface CharSequence
e o tipo de retorno vc deve atribuir tb a uma Collection que implemente a interface CharSequence

exemplo, esta seria uma chamada válida

//chamada válida por String implementa a interface CharSequence
Collection<String> colecao = getMethod(new ArrayList<String>());

esta seria uma chamada inválida

//chamada inválida porque Integer não implementa a interface CharSequence
Collection<Integer> colecao = getMethod(new ArrayList<Integer>());

//chamada inválida porque o tipo de retorno implementa a classe String mas Integer não implementa a interface CharSequence
Collection<String> colecao = getMethod(new ArrayList<Integer>());

ressaltando que a expressão pode ser um tipo E que implemente ou extenda a classe CharSequence(neste caso CharSequence é uma interface)

Não estou entendo a expressão em vermelho, qto ou elementos genéricos “E” td bem. O que me fez quebrar a cabeça é esse tipo de retorno.
Pq são duas expressões, e sendo assim não pra servem, são intervalos de classes q serão permitidas como retorno?? no Livro da Kathy não tem nd sobre isso, e mesmo assim tem um exercicio sobre!

Valeu!

vou tentar explicar
esta primeira parte [color=red]() [/color] vc define quem é o tipo genérico E(No exemplo o tipo E pode ser qualquer classe que extenda a classe CharSequence ou implemente a interface CharSequence)
no caso do exemplo CharSequence é uma interface

a segunda parte color=red [/color] é o tipo de retorno e este tipo de retorno é uma Collection mas esta Collection deve ser de alguma classe que implemente ou extenda a CharSequence (lembra na primeira parte vc definiu quem é o tipo E)

vou colocar outro exemplo:

 
//aqui eu defino que E deve ser algum tipo que seja Number ou extenda a classe Number ex.(Integer, Float, Double)
//e o meu tipo de retorno é um ArrayList<E> ou seja eu posso retornar um ArrayList<Number>, ArrayList<Integer>, ArrayList<Float> ou ArrayList<Double>
public static <E extends Number> ArrayList<E> listar() { }

[quote=vmsb11]vou tentar explicar
esta primeira parte [color=red]() [/color] vc define quem é E(No exemplo o tipo E pode ser qualquer classe que extenda a classe CharSequence ou implemente a interface CharSequence)

a segunda parte color=red [/color] é o tipo de retorno e este tipo de retorno é uma Collection mas esta Collection deve ser de alguma classe que implemente ou extenda a CharSequence (lembra na primeira parte vc definiu quem é o tipo E)
[/quote]

Não se trata de intervalos então!
Putz… por isso que não tem nd no livro explicando, pois não tem o que explicar!!! Cara, batata! Valeu mesmo por esclarecer! não sabia que era possivel agregar coringas ao elemento genérico declarado .

Muito Obrigado, abraço!