Type safety: Como eliminar essa warning no eclipse?

11 respostas
Marques

Colegas,

Se faço

Criteria c = secao.createCriteria(ProducaoApontamento.class);			
			c.add(Restrictions.between("dataProducao", dataInicial, dataFinal));
			List<ProducaoApontamento> aList = c.list();

Recebo a warning:
Type safety: The expression of type List needs unchecked conversion to conform to List

Se faço:

Criteria c = secao.createCriteria(ProducaoApontamento.class);			
			c.add(Restrictions.between("dataProducao", dataInicial, dataFinal));
			List<ProducaoApontamento> aLista = (List<ProducaoApontamento>)c.list();

Recebo as warnings:
Type safety: The expression of type List needs unchecked conversion to conform to List
e
Type safety: Unchecked cast from List to List

Como acabar com essas warnings?

Muito obrigado,

José Marques

11 Respostas

kaique

Cara, que eu saiba ou você deixa de usar generics nesse caso, ou usa uma annotation para esconder esse warning. A annotation é: @SuppressWarnings(“unchecked”)…

[]'s.

peczenyj

O Correto seria verificar o motivo desse warning, não esconde-lo :wink:

qmx

Até onde eu sei, isso é inerente ao hibernate mesmo, por não ter como saber o tipo da lista em runtime.

como o compilador vai saber que “select c from Contato c” vai devolver uma List<Contato> ?

:roll: opinião pessoal hein, sem flames :roll:

peczenyj

Vc pode usar Collections.checkedList()

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#checkedList(java.util.List,%20java.lang.Class)

De uma olhada aqui:
http://www.guj.com.br/posts/list/77574.java

qmx

cara, esse wrapper caiu como uma luva, obrigado!!! :wink:

guivirtuoso

Olá,

Conforme o nosso amigo peczenyj sugerio, o uso da wrapper Colletions ficaria como???
Seria da forma abaixo? já que o método checkedList retorna um List ???

List<ProducaoApontamento> aLista = Collections.checkedList( c.list(), ProducaoApontamento);

Um Abraco !

T
List<ProducaoApontamento> aLista = Collections.checkedList( c.list(), ProducaoApontamento.class);

Não se esqueça - leia o código com atenção.

guivirtuoso

Só faltou um .class"ezinho " … risoss…

Vlw thingol.

kaique

peczenyj:
Vc pode usar Collections.checkedList()

http://java.sun.com/j2se/1.5.0/docs/api/java/util/Collections.html#checkedList(java.util.List,%20java.lang.Class)

De uma olhada aqui:
http://www.guj.com.br/posts/list/77574.java

Relamente, sensacional isso. Não conhecia…up!!!

[]'s.

R

Pessoal,

ainda sou muito novato… Me ajudem pois ainda estou recebendo o warning…

Session session = ContaFactory.getFactory().openSession();
	
		Query query = session.createQuery("FROM Cliente");

		List <Cliente> clientes = new ArrayList<Cliente>();

		//Recebo Type safety: The expression of type List needs unchecked conversion to conform to List<Cliente>
		clientes = Collections.checkedList(query.list(), Cliente.class);

Obrigado!

leobmx

você pode utilizar o metódo a seguir para fazer o cast da coleção retornada pelo Criteria:

public static <E> List<E> castCollection(Collection<?> collection, Class<? extends E> clazz) {
      List<E> result = new ArrayList<E>(collection.size());
	 
      for (Object current : collection) {
            result.add(clazz.cast(current));
      }
      return result;
}

No caso você retornaria o cast ja listado:

public <E> List<E> findByClass(Class<E> entityClass) {
      Session session = (Session) em.getDelegate();
      Criteria criteria = session.createCriteria(entityClass);

      return castCollection(criteria.list(), entityClass);
}
Criado 25 de fevereiro de 2008
Ultima resposta 21 de mar. de 2013
Respostas 11
Participantes 8