Generics

2 respostas
adolfo_eloy

Olá pessoal.

Resolvendo um mock exam me deparei com a questão abaixo:

Given

class Foo {} class Bar extends Foo {} class Nar extends Foo {} class Krom extends Bar {}

Which three statements are true? (Choose three.)

A. The type List is assignable to List.
B. The type List is assignable to List.
C. The type List is assignable to List<?>.
D. The type List is assignable to List<? extends Bar>.
E. The type List<? extends Foo> is assignable to List.
F. The type List is assignable to any List reference.
G. The type List<? extends Bar> is assignable to List<? extends Foo>.

A Resposta do mock é CDG,
porém minha resposta é ACDFG (de acordo com uns testes que fiz em código fonte).

Alguém poderia ajudar a confirmar minha resposta?

Obrigado.

2 Respostas

ViniGodoy

A F não faz o menor sentido.

Uma List<Object> não pode ser associado a qualquer coisa, pois ela pode ter qualquer tipo de objeto e a outra lista (se não for também de object) certamente terá objetos mais específicos. Por exemplo:

List&lt;Object&gt; objetos = new ArrayList&lt;Object&gt;(); objetos.add(new Integer(10)); List&lt;String&gt; textos = objetos; //Isso iria deixar incluir um Integer numa lista de String.

A letra A está certa, embora você possa fazer a mesma besteira que citei acima.

Se você não tipar a lista, ela será associável a qualquer coisa, e poderá ser associada a qualquer coisa. Entretanto, isso gerará um warning, indicando que você deveria usar generics. Talvez por isso essa não seja uma das três melhores respostas. Esse recurso só existe por questões de compatibilidade.

adolfo_eloy

Vini,

quanto a letra F ( The type List is assignable to any List reference. ) eu acabei me confundindo.
Achei que o autor do mock quisesse dizer que List seria associável a qualquer referência de List “que não usasse generics”, como no exemplo abaixo:

List<Object> listaObject = new ArrayList<Object>(); List listaOld = listaObject;

Problema ao interpretar a questão.

Obrigado por ajudar a esclarecer. :smiley:

Criado 15 de janeiro de 2011
Ultima resposta 16 de jan. de 2011
Respostas 2
Participantes 2