Estudo de Generics!

3 respostas
nicoweda

Pessoal,

Estava estudando um pouco sobre generics e cai num uso de Generics como este:

public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)

Obs:. Este metodo pode ser encontrado na API de collections. http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#binarySearch(java.util.List,%20T)

Tenho que adimitir que levei um certo tempo pra entender oque estava acontecendo!!! Baseado nisto, me veio a pergunta…
“Qual é o nivel das questões de Generics?”

Alguem se lembra de ter visto algo como isto???

Abraços!

3 Respostas

T

Não caem coisas tão complicadas, mas você precisa saber o que é “? extends Bla” e “? super Bla” para responder uma ou duas questões.

T

Se você entender este código, vai responder à questão de generics com facilidade.

import java.util.*;

class TestWildcard {
    // Pode receber uma List&lt;Number&gt;, List&lt;Integer&gt;, List&lt;Double&gt; etc.
    public static double soma (List&lt? extends Number&gt lista) {
        double ret = 0.0;
        for (Number n : lista) {
            ret += n.doubleValue();
        }
        return ret;
    }
    // Como você deve saber, Object &lt- java.util.Date &lt- java.sql.Date
    public static List&lt? super java.util.Date&gt getNumeros() {
        List&lt;java.util.Date&gt; ret = new ArrayList&lt;java.util.Date&gt;();
        ret.add (new java.util.Date());
        ret.add (new java.sql.Date (new java.util.Date().getTime()));
        return ret;
    }
    
    public static void main(String[] args) {
        // ? extends algumacoisa é mais fácil de entender. 
        List&lt;Double&gt; doubles = new ArrayList&lt;Double&gt;();
        doubles.add (2.0);
        doubles.add (3.0);
        System.out.println (soma (doubles));
        List&lt;Integer&gt; integers = new ArrayList&lt;Integer&gt;();
        integers.add (2);
        integers.add (3);
        System.out.println (soma (integers));
        
        // ? super algumacoisa é mais difícil.
        List&lt? super java.sql.Date&gt numeros = getNumeros();
        // Não consigo pôr algo que seja menos específico que java.sql.Date
        numeros.add (new java.sql.Date(new java.util.Date().getTime()));
        //numeros.add (new java.util.Date()); // erro de compilação
        // Não consigo retirar nada que seja mais específico que Object
        Object obj = numeros.get(0);
        System.out.println (numeros);
    }
}
nicoweda

Valew ae pessoal !!!

Criado 25 de agosto de 2006
Ultima resposta 26 de ago. de 2006
Respostas 3
Participantes 2