Genericos

22 respostas
anderson.bonavides

public class genericos2 { //INSERIR CÓDIGO AKI private N min, max; public N getMin(){ return min;} public N getMax(){return max;} public void add(N added){ if(min == null || added.doubleValue() < min.doubleValue()) min = added; if(max == null || added.doubleValue() < max.doubleValue()) max = added; } } }

Qual declaração inserida na linha 2 compila?

A) public class MinMax<?>{

B) public class MinMax<? extends Number>{

C) public class MinMax{

D) public class MinMax{

E) public class MinMax<? extends Object>{

F) public class MinMax{

A resposta A,B,E eu sei que não rola mas o resto eu não entendi. Não consegui chegar a uma conclusão.


Alguêm poderia me ajudar com essa também?

import java.util.*; public class Old { public static Object get0(List list){ return list.get(0); } }
Quais 3 opções comipila com suceço?
A) Object o = Old.get0(new LinkedList());
B) Object o = Old.get0(new LinkedList<?>());
C) String s = Old.get0(new LinkedList());
D) Object o = Old.get0(new LinkedList());

22 Respostas

F

Meu amigo em relaco ao primeiro código realmente como vc disse o curinga “?” ta descartado pq é uma regra mesmo.Acho que essa parte é aceitar como um axioma ,as classes so podem ser declaradas com os limites do tipo class Tipo{}, agora pq essa convenção realmente não sei cara.Em realaçao ao segundo codigo to espantado pq eu juraria que não compilaria ao daria erro com qualquer das opcoes
afinal tem um get(0) que deve retornar algo,mas algo nao me parece ter sido adicionado. :frowning:

Raff

somente a A, D são opções válidas amigo ! Na Sua segunda pergunta !!!

Raff

não se pode fazer um new ArrayList<?>() por que o compilador não sabe o tipo do ? pode ser de qualquer tipo, então memorize isso não é válido!!!

Raff

Sem colocar um IDE veja se você consegue saber se vai rodar sem erros…

Raff

Na sua primeiro dúvida o que você não entendeu…
vamos lá tipo cara quando você vai declarar uma classe genérica você não pode fazer dessa maneira que eu vou mostrar

public class Teste&lt;? extends Doido&gt;{}// o que está errado aqui... o corringa

Agora para você "restringir"´que o tipo generico dessa classe você faz assim.

public class Teste&lt;N extends Number&gt;{}// ou seja qualquer subtipo de Number ou ele mesmo.
//dai você pode declarar assim cara..

public static void main(String... rafa){

Teste&lt;? extends Number&gt; t = new Teste&lt;Integer&gt;();
Teste&lt;Number&gt; t2 = new Teste&lt;Number&gt;();
Teste&lt;Integer&gt; t3 = new Teste&lt;Integer&gt;();

}

espero ter ajudado…

F

Realmente é verdade a pergunta era outra,este código manda uma exceção mas compila

B)realmente nao pode ser pq na criacao de um objecto não deve ter curinga “?” um axioma
C) tipo de retornos imcompativeis "String"
so resta A e D mesmo

A) Object o = Old.get0(new LinkedList()); 
B) Object o = Old.get0(new LinkedList<?>()); 
C) String s = Old.get0(new LinkedList<String>()); 
D) Object o = Old.get0(new LinkedList<Object>());

uma dica cara, qd tu ver esses curingas na criação de um objecto ou classe tu descarta logo ! :smiley:

Raff

fabioEM:
Realmente é verdade a pergunta era outra,este código manda uma exceção mas compila

Desculpe fábio mas eu não entendi o que você quis dizer com essa frase poderia me explicar melhor :stuck_out_tongue:

H

Cara… eu acredito que as respostas corretas da 1ª questão sejam a D e a F.

As resposta A, B e E estão fora de questão mesmo.

Supondo que N extends Number… para que o código compile, deve-se ter certeza que o método doubleValue() possa ser chamado, e isso é possivel somente se N for um Number ou Integer, como consta nas respostas D e F… Mas na letra C, se N for tratado como Object, não será possível chamar o doubleValue(), pois se trataria de um método indefinido para um Object.

Na 2ª questão… a letra B já não compila mesmo.

A letra C não compila tb pq vc está tentando jogar um Object dentro de uma String sem fazer casting.

Agora a letra A e D compilam normalmente pq vc tá trabalhando somente com Objects. E está armazenando o endereço de um Object na variável de referência corretamente.

Bom… acho q eh isso. Espero ter ajudado em algo.

LPJava

Na primeira as repostas corretas: C,D.

F - que clase extends a Integer? eu nao conheço e nunca vi na api.
E,B - Você está usando generics ai nao pode usar ? (coringa). Lembra que pode ser qualquer identificador válido para generics?
A - nunca vi isso em generics nao é um modificador válido.

questao 2:A,D

A- compila normal o metodo nao pediu nenhum tipo especifico
C - O metodo retorna um Object e vc nao pode colocar um Object dentro de uma String - nao compila
D - nao vejo problema nenhum aqui o metodo nao possui um tipo especifico posso colocar qualquer coisa.
B - nao lembro de exisitr isso:

List  list = new LinkedList<?>();

Completamente inválido.

flw! espero ter ajudado!! :smiley:

H

LPJava:
Na primeira as repostas corretas: C,D.

F - que clase extends a Integer? eu nao conheço e nunca vi na api.
E,B - Você está usando generics ai nao pode usar ? (coringa). Lembra que pode ser qualquer identificador válido para generics?
A - nunca vi isso em generics nao é um modificador válido.

questao 2:A,D

A- compila normal o metodo nao pediu nenhum tipo especifico
C - O metodo retorna um Object e vc nao pode colocar um Object dentro de uma String - nao compila
D - nao vejo problema nenhum aqui o metodo nao possui um tipo especifico posso colocar qualquer coisa.
B - nao lembro de exisitr isso:

List  list = new LinkedList<?>();

Completamente inválido.

flw! espero ter ajudado!! :D

Então cara… sobre a questão número 1.

Eu implementei o código aqui e quando eu coloco public class MinMax{ ou public class MinMax{ , o programa compila normal, mesmo sendo Integer uma classe final.
Mas seu eu coloco public class MinMax{ ele naum compila pq fala que naum foi possível encontrar os métodos doubleValue().

Eu num testei se o código roda normal, mas tá compilando aki.

F

Raff:
fabioEM:
Realmente é verdade a pergunta era outra,este código manda uma exceção mas compila

Desculpe fábio mas eu não entendi o que você quis dizer com essa frase poderia me explicar melhor :P

ok é pq achavo que a pergunta era se o cóigo compila e executa,entao nenhuma delas estaria certo,já a pergunta era outra só se compila :wink:

LPJava

henriquesglima:
LPJava:
Na primeira as repostas corretas: C,D.

F - que clase extends a Integer? eu nao conheço e nunca vi na api.
E,B - Você está usando generics ai nao pode usar ? (coringa). Lembra que pode ser qualquer identificador válido para generics?
A - nunca vi isso em generics nao é um modificador válido.

questao 2:A,D

A- compila normal o metodo nao pediu nenhum tipo especifico
C - O metodo retorna um Object e vc nao pode colocar um Object dentro de uma String - nao compila
D - nao vejo problema nenhum aqui o metodo nao possui um tipo especifico posso colocar qualquer coisa.
B - nao lembro de exisitr isso:

List  list = new LinkedList<?>();

Completamente inválido.

flw! espero ter ajudado!! :D

Então cara… sobre a questão número 1.

Eu implementei o código aqui e quando eu coloco public class MinMax{ ou public class MinMax{ , o programa compila normal, mesmo sendo Integer uma classe final.
Mas seu eu coloco public class MinMax{ ele naum compila pq fala que naum foi possível encontrar os métodos doubleValue().

Eu num testei se o código roda normal, mas tá compilando aki.

opa verdade, o metodo doubleValue() ele pertence diretamente a Number e ele contem dentro de Integer eheh e N extends a Object pode ser qualquer coisa… A resposta F é correta tb!

Quinger

ixiii pegou…
tenho q estudar :stuck_out_tongue:

LPJava

Quinger:
ixiii pegou…
tenho q estudar :P

generics nao é muito dificil nao sabendo as regras… vc mata muita questao… fundamentos, OO, controle de fluxo, onde mora muita pegadinha, muita mesmo…

Quinger

LPJava:

generics nao é muito dificil nao sabendo as regras… vc mata muita questao… fundamentos, OO, controle de fluxo, onde mora muita pegadinha, muita mesmo…

isso mesmo! tem tar por dentro dos conceitos e fundamentos…

aproveitando a situação, vc tem livro para indicar para a SCJP ?

vlw! abraços

anderson.bonavides

anderson.bonavides:
public class genericos2 { //INSERIR CÓDIGO AKI private N min, max; public N getMin(){ return min;} public N getMax(){return max;} public void add(N added){ if(min == null || added.doubleValue() < min.doubleValue()) min = added; if(max == null || added.doubleValue() < max.doubleValue()) max = added; } } }

Qual declaração inserida na linha 2 compila?

A) public class MinMax<?>{

B) public class MinMax<? extends Number>{

C) public class MinMax{

D) public class MinMax{

E) public class MinMax<? extends Object>{

F) public class MinMax{

A resposta A,B,E eu sei que não rola mas o resto eu não entendi. Não consegui chegar a uma conclusão.

Gujeiros confirmando a resposta de alguns da primeira questão D e F estão corretas. E da segunda questão a resposta era a A e D mesmo. A pena é que eu esqueci de digitar uma terceira alternativa que também tava correta. Mas essas duas já esclareceram tudo.

Conclusão: a primeira só vai ser aceita a D e a F porque Number tem o método doubleValue() é isso? Não ficou muito claro para mim.
:frowning:

Raff

exato anderson !!!

Raff

public class MinMax<N extends Object>{} não da certo por que Objeto não tem doubleValue()

anderson.bonavides

Então quer dizer que Integer também tem o método doubleValue()
???

F

um dica vc quer visualizar rapidamente os metodos de uma classe?
Aperte a tecla control acima da classe ira aparecer um dedinho assim vc tecla novamente acima!! :smiley: mas se vc estiver usando netbeans!!

Raff

Então quer dizer que Integer também tem o método doubleValue()
???

sim de uma olhada na api !!!

Raff

pode ser que você esteja confundindo com Double.parseDouble() esse é uma metodo static que cada classe Wrapper tem o seu mas o doubleValue(), intValue(), shortValue(), byteValue(), floatValue(), longValue() as Wrapper todas tem …!!! acho que só a Character que tem somente a charValue() …

Criado 28 de janeiro de 2008
Ultima resposta 30 de jan. de 2008
Respostas 22
Participantes 6