Erro ao compilar metodos com Generics[Resolvido]

2 respostas
apoklypse
tenho o seguinte classe com o método queryOn:
public class QueryUnique<E> implements Query<E> {

    private DetachedCriteria detached =null;

     public E queryOn(Repository repository) throws RepositoryException {
     
        return repository.uniqueResult(detached);
    }
}

e no meu repositório tenho o seguinte método

public <R> R uniqueResult(DetachedCriteria detached) throws RepositoryException {
        Session hibernateSession = (Session) this.manager.getDelegate();
        return (R) detached.getExecutableCriteria(hibernateSession).uniqueResult();
    }

porém ao compilar me exibi esse erro:

type parameters of <R>R cannot be determined; no unique maximal instance exists for type variable R with upper bounds E,java.lang.Object
        return repository.uniqueResult(detached);

como posso mudar meu código para esse erro não ocorrer?

2 Respostas

Marky.Vasconcelos

Voce não sabe nesse lugar qual a classe do tipo R.
voce devia fazer algo assim então

public <R> R uniqueResult(DetachedCriteria detached, Class<R> clazz) throws RepositoryException {
        Session hibernateSession = (Session) this.manager.getDelegate();
        return (R) detached.getExecutableCriteria(hibernateSession).uniqueResult();
    }

Nesse caso ele faria o cast.

apoklypse

tenho o seguinte classe com o método queryOn:

public class QueryUnique<E> implements Query<E> {  
      
    private DetachedCriteria detached =null;  
      
      public E queryOn(Repository repository) throws RepositoryException {  
        
         return repository.uniqueResult(detached);  
    }

public class QueryUnique implements Query { private DetachedCriteria detached =null; public E queryOn(Repository repository) throws RepositoryException { return repository.uniqueResult(detached); } }

e no meu repositório tenho o seguinte método

public <R> R uniqueResult(DetachedCriteria detached) throws RepositoryException { Session hibernateSession = (Session) this.manager.getDelegate(); return (R) detached.getExecutableCriteria(hibernateSession).uniqueResult(); }


Esse cast já existe o que fiz foi mudar para

public <R> Object uniqueResult(DetachedCriteria detached) throws RepositoryException { Session hibernateSession = (Session) this.manager.getDelegate(); return (R) detached.getExecutableCriteria(hibernateSession).uniqueResult(); }

Informando que seria do tipo Object resolveu meu problema.

Criado 18 de março de 2010
Ultima resposta 18 de mar. de 2010
Respostas 2
Participantes 2