• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Damon4hire

Classes e Interfaces

7 mensagens neste tópico

Ora boas pessoal.

Tenho mais uma dúvida.

Tenho uma interface a implementar 4 classes diferentes.

Cada 1 uma destas classes tem as 4 funções da interface

que recebem o objecto da propria classe.

eu queria uma outra classe a chamar esta funções de acordo

com a classe utilizada. Algo do genero:

public void read(Object o)
{
    o.getClass.getInterface().--função--( o );
}

Claro que estou a inventar para demonstrar a minha intenção.

É possivel fazer isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Há aqui alguma confusão, uma interface é isso mesmo, uma interface, não tem implementação e como tal não implementa 4 classes diferentes.

Para saberes a classe de um objecto usas o InstanceOf.

Quanto ao resto das tuas dúvidas, sinceramente não percebi o que queres e creio que se tu leres o teu post também não vais perceber de tão confuso que está!...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ok a culpa é minha que não expliquei bem.

Eu quis dizer que as 4 subclasses é que implementam

a interface.

public interface ILink

{

    void readFromDB(Object o);

    void updateDB(Object o);

    void insertToDB(Object o);

    void deleteFromDB(Object o);

}

1 das subclasses

public class Cliente implements ILink

{

    ....

    ....

    public static void readFromDB(Cliente c)

  {

      .....  }

}

Eu quero que ele, dependendo do objecto utilizado, vá buscar a classe desse objecto,

e o método correspondente.

Até agora tenho isto:

o.getClass().getDeclaredMethod("readFromDB",  /*  NÂO SEI O QUE PÔR AQUI */);

Sei que dificulto, mas agradeço a ajuda.  :D

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Grande confusão lol primeiro não são subclasses, são classes que implemento o interface, subclasses são classes que herdam outra classe.

Acho que estás a fazer isso algo mal, primeiro tenho serias duvidas que esse codigo compile dado que no interfaces defines os argumentos como Object e na implementação como Cliente se queres fazer isso dessa forma penso que o melhor será usares generics.

Se bem percebo estás a tentar implementar um DAO, essa forma não é a mais correcta, alias parece-se que estás a criar uma redundância... Ora vejamos tem o interface que permite abstrair o Tipo mas depois voltas a especificar e a chamar o próprio método ou seja ao que me parece o que estás a fazer é o seguinte

Cliente->ILink.readFromDB->Cliente.readFromDB->ILink.readFromDB->Cliente.readFromDB....................

Ou estou a ver mal ou é isso que tens :|

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

ok sorry ainda não domino os conceitos.

Está Object porque se esse Object for do tipo Cliente ele faz o readDB da classe Cliente,

se for de outra classe faz o readDB da outra classe.

O mesmo se aplica para outro método que não seja readDB.

Quero poder chamar qualquer uma daquelas funções na classe correcta

a partir do objecto introduzido.

Acho que consegui, fica qualquer coisa assim:

private static void contactDB(Object o, String metodo)

    {

        Class[] args = new Class[1];

        args[0] = o.getClass();

       

        try{ o.getClass().getDeclaredMethod(metodo, args); }

        catch (NoSuchMethodException ex) { System.out.println(ex.toString()); }

    }

    public void readDB(Object o)

    {

        this.contactDB(o, "readFromDB");

    }

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Que confusão... E acho que a mesma provem de um mau desenho...

Estás a implementar quando devias estar a desenhar a coisa.

Se bem percebi o que queres, se todas essas classes implementam uma interface que tem um método, então basta fazeres a chamada ao metodo, dado que é irrelevante a classe, desde que o objecto seja do tipo da interface.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Mais ou menos lol.

E eu não estou a implementar nada ainda, isto era uma ideia.

Mas não vou martelar mais isto visto tambem não conseguir explicar bem.

Mas agradeço na mesma.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora