[RESOLVIDO] Dúvida sobre necessidade do uso de Generics

4 respostas
ul1sses

Caros colegas, antes de mais nada, ainda estou estudando sobre Generics. Caso o questionamento seja sem nexo, sintam-se livres para avisar.

O questionamento:

Há um método que deve receber como parâmetro uma classe (Ex.: Usuario.class) e retorna uma lista de objetos deste tipo passado.

Minha dúvida seria sobre qual a abordagem mais correta nesta situação:

  1. Utilizar Generics para evitar cast posterior ao receber a lista:
...
public static <T> List<T> buscarTodos(T classe) {
    ...
}
  1. Ou utilizar como tipo de retorno um raw List mesmo:
...
public static List buscarTodos(Class classe) {
    ...
}

4 Respostas

ViniGodoy

Melhor usar o generic. Cast é sempre uma operação insegura. O método que aceita o objeto do tipo Class pode verificar se o que está sendo buscado é mesmo da classe que o programador quer, retornar a lista sem necessidade de cast, e disparar uma exceção imediatamente em caso de problemas.

Caso você não use generics, corre-se o risco de que a exceção da lista dispare muito longe do trecho de código onde ela foi requisitada. Por exemplo, pode ser que ela seja disparada dentro de um TableModel que está tentando desenhar a lista, e nem sequer você veja onde que a lista dentro daquele model foi carregada.

ul1sses

Outra dúvida minha, na qual você já deu uma alternativa Vini:

E se eu quiser evitar que na utilização do método sejam passados como parâmetro objetos que não sejam do tipo Class, não poderia utilizar <T extends Class> ?

ViniGodoy

Não, o correto seria fazer:

public static &lt;T&gt; List&lt;T&gt; buscarTodos(Class&lt;T&gt; classe) { ... }

Pois note, você quer passar para o método um Class<String> e retornar um String.
Ou seja, T é um String e não um Class<String>

ul1sses

Realmente, falta de atenção minha.

Agradeço a explicação, Vini.

Até a próxima dúvida. rs :slight_smile:

Criado 25 de março de 2013
Ultima resposta 25 de mar. de 2013
Respostas 4
Participantes 2