Dei uma olhada (passei o código abaixo para o compilador), e realmente as alternativas corretas são A, C, D e G.
importjava.util.*;classA{}classBextendsA{}classCextendsA{}classDextendsB{}classAssignable{publicstaticvoidmain(String[]args){Listlist=newArrayList();List<A>listA=newArrayList<A>();List<B>listB=newArrayList<B>();List<Object>listObject=newArrayList<Object>();List<D>listD=newArrayList<D>();List<?>listWhat=newArrayList<Object>();List<?extendsA>listExtendsA=newArrayList<B>();List<?extendsB>listExtendsB=newArrayList<D>();//A. The type List<A> is assignable to List. => OKlist=listA;//B. The type List<B> is assignable to List<A>. => Incompatible typeslistA=listB;//C. The type List<Object> is assignable to List<?>. => OKlistWhat=listObject;//D. The type List<D> is assignable to List<? extends B>. => OKlistExtendsB=listD;//E. The type List<? extends A> is assignable to List<A>.listA=listExtendsA;// => incompatible types//F. The type List<Object> is assignable to any List reference. list=listObject;// => OKlistA=listObject;// => incompatible types//G. The type List<? extends B> is assignable to List<? extends A>. => OKlistExtendsA=listExtendsB;}}
J
javadev
Mais um erro encontrado no Killer.
victorwss
osmio:
Até onde eu sei, Generics do tipo:
List<? extends TipoDeClasse>
só pode receber objetos que EXTENDAM TipoDeClasse. Não classes TipoDeClasse.
Por exemplo, na minha concepção isso seria válido:
Agora, sinceramente não sei te dizer se o compilador deixa passar ou não.
Nunca testei algo assim.
Tenta atualizar a versão do update do jdk. Talvez isso já tenha sido corrigido e ainda não sabemos.
Até!
Isso é perfeitamente válido:
Este “? extends A”, quer dizer “A ou qualquer uma de suas subclasses”.
Deluxe
ih vei no killer tem altos erro, uns até sem logica,
por isso que quando eu estudo os simulados, eu testo todos,
LPJava
assim… qdo nao queremos “erros” compramos… o whizlabs ta a venda… e nao foi encontrando nenhum erro nas questoes…
J
javadev
assim… eu tenho o Whizlabs… a única coisa que fiz foi uma constatação, apesar de muito bom eu não me prendo a apenas esse simulado.
F
fabioEM
Só mais uma sujestão :
esse tipo de criação de um objecto tem um propósito importante para passagens por referências,ou seja caso vc tenha:
[code]
class Animal{
}
class Dog extends Animal{
}
class Text{
public static void main(String...a){
List extends Animal> lista_animal=new ArrayList();
List lista_dog=new ArrayList();
//agora vc pode tranquillamente fazer
lista_animal=lista_dog;//vc esta referenciando uma Objecto listaDog
//agora o contrario
List super Dog> lista_dog2=new ArrayList();
List lista_animal2=new ArrayList();
lista_dog2=lista_animal2;//agora vc consegue referenciar algo que esta acima na arvore de heranca!!que normalmente não é permitido em java
}
}
Só mesmo para acrescentar :-o bom estudos!!
}
victorwss
Isso não é válido. Na hora de criar o elemento o tipo tem que ser conhecido. Só na hora de referenciar é que ele não precisa ser conhecido. Ou seja:
Bom pelo que a gente viu no metodo getObject B é uma classe concreta ja que usa operador new nela, e tipo
classes concretas não podem ter metodos abstracts…além do mais se ela fosse uma classe abstrata tbem…
metodos aabstract não terminam com chaves e sim com parenteses…
lembre-se que vc está especificando apenas sua assinatura…não seu corpo…por iss ele é abstrato.
Spool
Até onde eu sei, Generics do tipo:
List<? extends TipoDeClasse>
só pode receber objetos que EXTENDAM TipoDeClasse. Não classes TipoDeClasse.
Por exemplo, na minha concepção isso seria válido:
Agora, sinceramente não sei te dizer se o compilador deixa passar ou não.
Nunca testei algo assim.
Tenta atualizar a versão do update do jdk. Talvez isso já tenha sido corrigido e ainda não sabemos.
Até!
Spool
victorwss:
Isso é perfeitamente válido:
Este “? extends A”, quer dizer “A ou qualquer uma de suas subclasses”.
Imagine essa estrutura:
abstractclassA{publicabstractvoidfacaAlgo();}BextendsA{publicabstractvoidfacaAlgo(){}}classTeste{publicstaticvoidmain(String...args){List<?extendsA>lista=newArrayList<?extendsA>();// nesse momento eu faço uma chamada ao metodo getObjeto que me // retorna um objeto tipo A. até aqui sem problemas. // mas A é uma classe abstrata que contem métodos abstratos.// como posso garantir que o objeto que esta vindo é uma subclasse // de A e que implemente seus métodos abstratos?// se eu tentar criar uma instancia de A, não vai funcionarlista.add(getObjeto());}AgetObjeto(){returnnewB();}}