já vi muito a utilização no java de por exemplo por ex: List ou List e etc…
mas lendo a doc sobre uma determinada classe vi assim <?> o que seria essa interrogação? na documentação ela server pra dizer que o array pode ter qualquer objeto ou ela pode ser implementada assim? tentei colocar List<?> e não deu erro, mas não aceitou nenhum objeto que eu tentei add.
como isso funciona?
aceita qualquer classe que SEJA(extends) uma Pessoa
G
gambazinho
compreendi, então a ? nunca deve ser utilizada sozinha, ela na verdade ela permite melhorar a especificação do objeto da Lista… acho que enteid, obrigado!
ctosin
Olá,
O “?” significa que você pode utilizar qualquer tipo de classe. E é bem isso mesmo: você não pode adicionar elementos se declarar a lista dessa forma, pois isto poderia gerar inconsistências na lista (tem a ver com questões internas de implementação do mecanismo do generics).
Se você quer criar uma lista de apenas um tipo, declare ela com o tipo, como List. Dessa forma você vai poder adicionar elementos do tipo Cachorro. Se você quer usar o “?” e ainda assim quiser inserir elementos na lista, você precisa dizer ao Java que você só vai inserir na lista elementos de um determinado tipo ou que sejam uma superclasse desse tipo. Você poderia declarar como List<? super Cachorro>, o que permitiria a você adicionar objetos Cachorro ou objetos de uma possível superclasse de cachorro (por exemplo, Animal).
Abraço!
G
gambazinho
prezados,
e porque não funcionou aqui?
tenho a classe MyExecutor que estende uma thread e ao fazer assim:
mesma coisa acontece caso eu faça com extends.
pq?
ctosin
Se você declara a lista como List<? super MyExecutor>, você pode atribuir à variável listas de objetos MyExecutor ou de qualquer tipo que seja uma superclasse de MyExecutor. Mas quando o assunto é inserção de elementos, você só pode inserir objetos do tipo MyExecutor. Por isso o código não compila.