Qual dos fragmentos inseridos na linha comentada compila?
public class Test2 {
public <T extends Comparable> T findLarger(T x, T y){
if(x.compareTo(y)> 0){
return x;
}else {
return y;
}
}
public static void main(String[] args) {
Test2 t = new Test2();
//INSIRA O CÓDIGO AQUI.
}
}
Essa questão é meio chata - na minha prova não caiu tal grau de compreensão de generics. Acho que não cai nada tão difícil assim.
importjava.util.*;classTest2{public<TextendsComparable>TfindLarger(Tx,Ty){if(x.compareTo(y)>0){returnx;}else{returny;}}publicstaticvoidmain(String[]args){Test2t=newTest2();// A linha 1 (OK) equivale a: Object x = (Object) t.findLarger ((Object) new Integer(123), (Object) "456");Objectx=t.findLarger(123,"456");// OK// A linha 2 a seguir é equivalente a // Integer x = t.findLarger (new Integer(123), new Double(456)) e é por isso// que dá problemas (T x = Integer != T x = Double)intx=t.findLarger(123,newDouble(456));// A linha 3 (OK) a seguir equivale a:// int x = ((Integer) t.findLarger (new Integer (123), new Integer (123)).intValue();intx=t.findLarger(123,newInteger(123));// A linha 4 vai dar problema porque não há findLarger com 3 parâmetros. intx=(int)t.findLarger(123,newInteger(123),newDouble(456));}}
anderson.bonavides
Não posso dizer que to um expert. Mas posso dizer que compreendi.
Raff
como o thingol falow eu acho que A,B,C é isso mesmo pessoal ?
Giulliano
Pelo pouco que eu entendi do código apenas A e B são corretas…
Raff
eu tbm entendi muito pouco !!!hauha valew cara!!
victorwss
A não compila porque o erasure comum entre Integer (via autoboxing) e String é Object, e Object não implementa Comparable.
B não compila porque, embora Number implemente Comparable (Number é superclasse de Integer e Double), o tipo de retorno seria Number, que não pode ser atribuído a int sem um autounboxing e um cast.
C compila, pois com o autoboxing o tipo T se refere a Integer que com autounboxing é atribuído a int.
D não compila porque findLarger tem dois parâmetros, e não três.