Para que não ocorra erro de compilação, o valor de TIPO deve ser:
A) ?
B) ? super T
C) ? extends T
D) ? instanceof T
E) ? implements T
No gabarito esta como (B), mas eu não entendo, pq tem que sobrescrever a classe T???
? implements T e ? instanceof T não existem.
Só ? não funcionaria pois uma coleção de “indefenido” não aceita add de "algo definido"
Ou seja, com ? o compilador não sabe se é uma coleção de T ou não e por isso não permite.
Sobre ? extends T e ? super T.
Entenda que apenas T funcionaria.
Porque super e não extends ? Porque extends singificaria que a coleção poderia ser de um subtipo de T
Uma coleção de subtido não pode aceitar um supertipo. Por exemplo
void method(Collection c, T o)
me permite passar uma coleção de String e ‘o’ ser um StringBuilder. Vai dar problema depois quanto tentar iterar a coleção com String.
Então, por exclusão de partes sobre “? super T”.
jason_bourne
sergiotaborda:
eduacsp:
Pessoal,
Estou com dúvida nessa questão:
<T>voidmethod(Collection<TIPO>c,To){c.add(o);}
Para que não ocorra erro de compilação, o valor de TIPO deve ser:
A) ?
B) ? super T
C) ? extends T
D) ? instanceof T
E) ? implements T
No gabarito esta como (B), mas eu não entendo, pq tem que sobrescrever a classe T???
? implements T e ? instanceof T não existem.
Só ? não funcionaria pois uma coleção de “indefenido” não aceita add de "algo definido"
Ou seja, com ? o compilador não sabe se é uma coleção de T ou não e por isso não permite.
Sobre ? extends T e ? super T.
Entenda que apenas T funcionaria.
Porque super e não extends ? Porque extends singificaria que a coleção poderia ser de um subtipo de T
Uma coleção de subtido não pode aceitar um supertipo. Por exemplo
void method(Collection c, T o)
me permite passar uma coleção de String e ‘o’ ser um StringBuilder. Vai dar problema depois quanto tentar iterar a coleção com String.
Então, por exclusão de partes sobre “? super T”.
Sim…mas porque sobrescrever T? eu não poderia simplesmente colocar ?
LPJava
nao é válido usar ? nesse caso… se vc tiver lendo o capitulo da kathy no final do capitulo de generics tem as regrinhas pq nao pode usar ? para esse seu exemplo dar uma revisada la… olhe o exemplo abaixo:
isso é diferente do seu exemplo nesse caso aqui posso usar o ? pq nao se trata de genericos em si… até pq se eu tirar os tipos aqui isso roda na versao 1.4 tranquilamente…
O seu codigo é um exempl o classico de genericos… e como ? nao é um identificador valido entao nao vale… lembra quais sao os identificadores validos em java? Entao eles podem ser usados em genericos.
flw!!
jason_bourne
LPJava:
nao é válido usar ? nesse caso… se vc tiver lendo o capitulo da kathy no final do capitulo de generics tem as regrinhas pq nao pode usar ? para esse seu exemplo dar uma revisada la… olhe o exemplo abaixo:
isso é diferente do seu exemplo nesse caso aqui posso usar o ? pq nao se trata de genericos em si… até pq se eu tirar os tipos aqui isso roda na versao 1.4 tranquilamente…
O seu codigo é um exempl o classico de genericos… e como ? nao é um identificador valido entao nao vale… lembra quais sao os identificadores validos em java? Entao eles podem ser usados em genericos.
flw!!
agora entendo…vlw!
Raff
Fala pessoal blza !!!
Seguinte amigo !!!
no codigo que você passo tem somente uma certo que é a ? super T, o motivo de não poder usar ? extends T e ? é simplismente por que no codigo está adicionando um elemento no Collection, eñtão não compila!
Já que você mostrarão uma pergunta sobre generico o que você acham dessa ?
na minha opniao nao compila, pq se vc passar o mesmo tipo para X,Y entao a regra de fundamentos de ter dois metodos com mesmo tipo de retorno e mesmo args. Apesar de ser uma variavel diferente, mais qdo passar o tipo pode ser igual e nem eu nem vc sabe qual tipo vai ser passado ai se mudar o nome do metodo isso compila.
Bom foi o q pensei..
Raff
Como eu esperava de você Camilo Certinho
LPJava
hauah que nada!! tudo sempre acaba nas regras de fundamentos, OO etc…se nao lembrar delas nao dar para aprender generics, api etc… alguem poderia implementar isso, se nao lembra mais das regras…