Questão de Collections e Generics  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
danielbussade
JavaEvangelist

Membro desde: 13/09/2007 09:26:21
Mensagens: 416
Localização: Itaperuna -RJ
Offline

Fala galera blz, estava fazendo um simulado da Caelum no site, e parei na seguinte questão:


Quais das linhas abaixo (independentemente) deixa o código acima compila, substituindo o comentário "//aqui" (escolha tres opções)?

a) List<Carro> carros = new ArrayList<Trabant>();
b) List<Carro> carros = new ArrayList<Carro>();
c) List<Trabant> carros = new ArrayList<Trabant>();
d) List<? extends Carro> carros = new ArrayList<Trabant>();
e) List<T> carros = new ArrayList<Carro>();
f) List<? extends Carro> carros = new ArrayList<? extends Carro>();
g) List<T super Carro> carros = new ArrayList<Trabant>();

As respostas certas, são bcd

Agora alguém pode me explicar porque a letra A, e a letra F não está correta???


Valeu!!
Att

When you steal from one author, is called plagiarism, when you steal from many is called research.

[WWW] [MSN]
acopiara
JavaChild
[Avatar]

Membro desde: 14/11/2006 17:15:33
Mensagens: 149
Offline

a) List<Carro> carros = new ArrayList<Trabant>();
Quando você define um atributo com o tipo Generico, a criação do objeto deve possuir o mesmo tipo. Se isso fosse permitido você poderia inserir um carro qualquer no list de carros Trabant, e daria uma exception em tempo de execução.

f) List<? extends Carro> carros = new ArrayList<? extends Carro>();
Não pode ser usado curinga no lado da criação do Objeto.


Eu acho que é isso!!!


Valeu

--
Alysson Bandeira
gk-bgh
JavaGuru

Membro desde: 27/04/2007 22:42:28
Mensagens: 200
Offline

danielbussade wrote:Fala galera blz, estava fazendo um simulado da Caelum no site, e parei na seguinte questão:


Quais das linhas abaixo (independentemente) deixa o código acima compila, substituindo o comentário "//aqui" (escolha tres opções)?

a) List<Carro> carros = new ArrayList<Trabant>();
b) List<Carro> carros = new ArrayList<Carro>();
c) List<Trabant> carros = new ArrayList<Trabant>();
d) List<? extends Carro> carros = new ArrayList<Trabant>();
e) List<T> carros = new ArrayList<Carro>();
f) List<? extends Carro> carros = new ArrayList<? extends Carro>();
g) List<T super Carro> carros = new ArrayList<Trabant>();

As respostas certas, são bcd

Agora alguém pode me explicar porque a letra A, e a letra F não está correta???


Valeu!!
Att



a) List<Carro> carros = new ArrayList<Trabant>();
Não compila porque <Carro> é diferente de <Trebant>. Os dois tipos genéricos tem que ser iguais.

f)f) List<? extends Carro> carros = new ArrayList<? extends Carro>();
Você não pode usar o <?> na criação do objeto. Só na DECLARAÇÃO.

[]s
Gunnar


Bacharel em Ciência da Computação PUC Minas.
Cursando Pós-Graduação em Administração de Empresas na Fundação Getúlio Vargas
Sun Certified Associate for Java Platform
Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

Daniel é o seguinte o compilador para genericos ele vefirica os tipos em tempo de compilação e não em tempo de execução como é feito no caso de arrays .. Isso pode ser feito com arrays porque o compilador se preocupara com o tipo em tempo de execução...
agora

Obs: Assuma que Animal é superClasse de Dog.


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

Espero ter ajudado!!!


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline



Daniel isso vai compilar, vai causar um exceção ???

This message was edited 1 time. Last update was at 11/12/2007 11:33:27



SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
gk-bgh
JavaGuru

Membro desde: 27/04/2007 22:42:28
Mensagens: 200
Offline

Muito boa a questão Raff.


Eu já esperava que compilaria sem problemas. Só não esperava o exception em tempo de execução.

[]s
Gunnar

Bacharel em Ciência da Computação PUC Minas.
Cursando Pós-Graduação em Administração de Empresas na Fundação Getúlio Vargas
Sun Certified Associate for Java Platform
Sun Certified Java Programmer 5.0
Sun Certified Web Component Developer 5.0
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

verdade esses tipo de questoes são muito boas mesmo !Obrigado !


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17572
Offline

Compila e dá erro de execução.

Isso foi um dos erros da definição da linguagem Java, e foi infelizmente copiado no .NET; na verdade, esse problema foi percebido, e evitado na definição de generics. Com generics tal problema não pode ocorrer:
[WWW]
danielbussade
JavaEvangelist

Membro desde: 13/09/2007 09:26:21
Mensagens: 416
Localização: Itaperuna -RJ
Offline

Valeu Raff, pela explicação agora sim deu pra entender legal, neste seu caso com o thingol respondeu:



Compila normalmente, mas quando ele vai tentar insntanciar a posicão 2 do vetor com new Cat dará erro de excecução, pois ele só aceita referencias de Dog.

Certo??

Att

When you steal from one author, is called plagiarism, when you steal from many is called research.

[WWW] [MSN]
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

É isso ai daniel


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

thingol wrote:Compila e dá erro de execução.

Isso foi um dos erros da definição da linguagem Java, e foi infelizmente copiado no .NET; na verdade, esse problema foi percebido, e evitado na definição de generics. Com generics tal problema não pode ocorrer:

thingol por que isso não compila??



eu achava que isso compilaria sim pois a classe dog implementa a interface Animal..
Estou errado ? ou Certo ?

[Email] [MSN]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17572
Offline

Amigo, eu escrevi no código acima:


Ou seja, o código compila direitinho.
[WWW]
gk-bgh
JavaGuru

Membro desde: 27/04/2007 22:42:28
Mensagens: 200
Offline

Raff wrote:
thingol wrote:Compila e dá erro de execução.

Isso foi um dos erros da definição da linguagem Java, e foi infelizmente copiado no .NET; na verdade, esse problema foi percebido, e evitado na definição de generics. Com generics tal problema não pode ocorrer:

thingol por que isso não compila??



eu achava que isso compilaria sim pois a classe dog implementa a interface Animal..
Estou errado ? ou Certo ?



compila sim.
<? extends Animal> aceita qualquer coisa do tipo Animal ou suas subclasses. Em outras palavras, qualquer coisa que SEJA um Animal.

A única observação é que quando você utiliza <? extends Animal> você não pode adicionar elementos ao collection, a não ser que utilize <? super Dog>. Ai você pode adicionar elementos ao collection, já que você sabe de antemão o que vai ser adicionado. Outra restrição é que esses elementos tem que ser do tipo DOG (no meu exemplo). Se for de qualquer outro tipo dá erro de compilação.



[]s
Gunnar
Raff
Virtual Machine Man
[Avatar]

Membro desde: 31/07/2006 10:31:45
Mensagens: 642
Localização: Marilia - SP / São Carlos -SP
Offline

foi mal thingol não vi o que tu escreveu


SCJP 5.0
SCWCD 5.0
Mestrando UFSCAR...
[Email] [MSN]
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team