Classe genérica [RESOLVIDO]

6 respostas
fredsilva.sistemas

Olá amigos do GUJ,
Quero desenvolver uma inteface listando os métodos as serem implementados e gostaria de passar como parâmetro nos métodos uma classe genérica, esta só seria informada no momento em que o método fosse implementado.
Escopo:

public interface GenericDao {
    public void salvar(minhaClasse);//Aqui eu quero passar uma classe genérica
    public void alterar(minhaClasse);//Aqui eu quero passar uma classe genérica
    public List<minhaClasse> lista();//Aqui eu quero passar uma classe genérica dentro da lista
    public List<minhaClasse> consulta(minhaClasse);//Aqui eu quero passar uma classe genérica dentro da lista
}

Sei que é uma coisa simples, mas peço a ajuda dos amigos.
Um forte abraço a todos!

6 Respostas

nel

Veja se ajuda: http://www.guj.com.br/java/33085-genericdao

Mas é relativamente simples.

fredsilva.sistemas

nel:
Veja se ajuda: http://www.guj.com.br/java/33085-genericdao

Mas é relativamente simples.


Bom nel, funcionou quase que perfeito.
Criei a Inteface:

public interface GenericDao<T> { public void salvar(T classe); public void alterar(T classe); public List<T> lista_todos(T classe); public List<T> consulta(T classe); }
Implementei seus métodos:

public class UsuarioDao implements GenericDao{
    
    public void salvar(Usuario user) {
        Session session = Conexao.getSession();
        Transaction tx = session.beginTransaction();
        session.save(user);
        tx.commit();
        session.close();
    }
    
    public void alterar(Usuario user) {
        Session session = Conexao.getSession();
        Transaction tx = session.beginTransaction();
        session.update(user);
        tx.commit();
        session.close();
    }
    
    public List lista_todos(Usuario user) {        
        Session session = Conexao.getSession();
        List<Usuario> lista = new ArrayList<Usuario>();
        lista = session.createQuery("from Usuario user order by user.id desc").list();
        return lista;
    }
    
    public List consulta(Usuario user) {
        Session session = Conexao.getSession();
        List<Usuario> lista = new ArrayList<Usuario>();
        lista = session.createQuery("from Usuario user where user like='"+user.getNome()+"%'").list();
        return lista;
    }
}

Mas o NetBeans me obriga a deixar este código:

@Override
    public void salvar(Object classe) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void alterar(Object classe) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List lista_todos(Object classe) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public List consulta(Object classe) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

Pois se eu deixar sem, ele fala que eu tenho que implementar os métodos abstratos
O que pode ser?

B

Faltou vc passar o parâmetro de tipo ao implementar a interface. Coloca assim:

public class UsuarioDao implements GenericDao<Usuario>  {
fredsilva.sistemas

Ok, descobri aqui. Eu coloquei assim na declaração da classe:

public class UsuarioDao implements GenericDao

E deveria ser assim:

public class UsuarioDao implements GenericDao<Usuario>

Esqueci de especificar qual classe deveria substituir a classe genérica
Um abraço! Obrigado pela ajuda!

fredsilva.sistemas

[quote=bob_sponja]Faltou vc passar o parâmetro de tipo ao implementar a interface. Coloca assim:

public class UsuarioDao implements GenericDao<Usuario>  {

Realmente bob_sponja, quando vc respondeu eu já estava postado justamente isso.
Valeu! :smiley:

B

[quote=fredsilva.sistemas]

bob_sponja:
Faltou vc passar o parâmetro de tipo ao implementar a interface. Coloca assim:

public class UsuarioDao implements GenericDao<Usuario>  {

Realmente bob_sponja, quando vc respondeu eu já estava postado justamente isso.
Valeu! :smiley:

De boa, estamos aqui pra isso… Melhor ainda que você conseguiu descobrir sozinho :slight_smile:

Criado 5 de janeiro de 2012
Ultima resposta 5 de jan. de 2012
Respostas 6
Participantes 3