Duvida Interface

15 respostas
V

Fala galera blz…

Estou com uma duvida aqui, tenho uma Interface que implementa medodos de inclusão, deleção e exlusão,
mas isso nao vem ao caso, o que eu quero é saber como eu especifico na minha Interface
que o parametro de um metodo meu sera uma classe ex:

eu tenho um metodo :

public boolean Insert(Classe c) throws SQLException;

Eu queria que minha interface deixase fixo que esse metodo recebera qualquer classe.

será que fui claro ? :confused:

15 Respostas

R

É só declarar o parâmetro como do tipo Object (que é a superclasse de todas as classes em Java).

public boolean Insert(Object obj) throws SQLException;

Seria mais ou menos isso? Aí o seu método pode receber objeto de qualquer classe.

Abraços,
Rodrigo

furutani

Fala Vinicius!
Ficou meio confuso.

Um interface não implementa ela apenas declara.

Como assim deixar fixo?

V

Certo, até ai eu ja sabia, mas como eu faço para esse objeto implementar medodos da classe q eu passei por parametro ?

V

fala furutani meu velho, blz!

intao , eu queria declarar ela para receber o parametro de tipo class.

nesse tipo :

public boolean Insert(Classe c) ;

para que depois na minha classe que implementar a interface esse metodo possa receber qualquer classe, para que eu possa utilizar os metodos .

intendeu !?!

furutani
vinnymaran:
Certo, até ai eu ja sabia, mas como eu faço para esse objeto implementar medodos da classe q eu passei por parametro ?
Não entendi o que voce quer fazer. Mas para que uma classe implemente os metodos da sua interface basta fazer assim na sua classe:
public class MinhaClasse implements MinhaInterface {

	public Object meuMetodo(String string) {
		return null;
	}

}
Sendo qua a interface é essa:
public interface MinhaInterface {
	
	public Object meuMetodo(String string);

}
fabiozoroastro
public boolean metodo(Class classe){
// implemente
}

Você poderá receber qualquer classe como parâmetro, mas para saber qual classe foi recebida, você precisará usar reflection, pois o valor de classe será somente o caminho da classe passada. ex.:

public static void main(String args[]){
   metodo(String.class);
}

public boolean metodo(Class classe){
sysout(classe);
}

Imprime:

Abraço.

V

Eu quero passar uma classe como parametro ex:

public void insert(Classe c)

{



c.meuMetodo();



}
V

fabiozoroastro vc passou perto do que eu quero. !

edwins

Talvez vc devesse implementar para cada classe sua que será inserida no banco, uma classe persistente que implementaria a interface descrita acima.
Digamos que você tenha uma classe Pessoa, vc criaria uma nova classe, digamos BrokerPessoa que implementaria a sua interface.
Ficaria mais ou menos assim

&nbsp public class BrokerPessoa implements MinhaInterface{

&nbsp&nbsp&nbsp&nbsp     public boolean Insert(Object obj) {

&nbsp&nbsp&nbsp&nbsp           Pessoa p = (Pessoa) obj;

&nbsp&nbsp&nbsp&nbsp             

&nbsp&nbsp&nbsp&nbsp            

&nbsp&nbsp&nbsp&nbsp       }

&nbsp }
V

Um exemplo a grosso modo seria isso :

public class teste {

	private String nome = "";

	
	public void setNome(String value) {
		this.nome = value;
	}

	public String getNome() {
		return nome;
	}
	
	public void show(teste t) {
          
		System.out.println(t.nome);		
	}

	public static void main(String[] args) {
		

		teste t = new teste();
		
		t.setNome("Vinicius");		
		
		t.show(t);

	}
furutani

Agora entendi!

Só pra complementar as resposta do fabiozoroastro, para voce invocar o metodo veja esse exemplo que eu encontrei

Class c = String.class;
      Class[] parameterTypes = new Class[] {String.class};
      Method concatMethod;
      Object[] arguments = new Object[] {secondWord};
      try {
        concatMethod = c.getMethod("concat", parameterTypes);
        result = (String) concatMethod.invoke(firstWord, arguments);
      } catch (NoSuchMethodException e) {
          System.out.println(e);
      } catch (IllegalAccessException e) {
          System.out.println(e);
      } catch (InvocationTargetException e) {
          System.out.println(e);
      }

http://java.sun.com/docs/books/tutorial/reflect/object/invoke.html

fabiozoroastro

Olha o exemplo que eu fiz aqui:

public static void main(String[] args) throws InstantiationException, IllegalAccessException {

		Object obj = minha(Outro.class);
		System.out.println(((Outro)obj).getFabio());
		
	}

	public static Object minha(Class classe) throws InstantiationException, IllegalAccessException {
		return classe.newInstance();		
		
	}

Caso vc queira usar os métodos da classe dentro do método minha,
vc vai ter que fazer um cast lá dentro. Aí eu acho que não vai ter utilidade nenhuma o método. Ou seja, este método não vai te ajudar. Você vai precisar usar reflection .
Mas se alguém souber outra forma me corriga. :slight_smile:

Abraço.

fabiozoroastro

Qual o motivo de você querer este método com essa assinatura?
Não vi nenhuma utilidade nele.

Abraço.

V

fabiozoroastro apenas para estudo e conhecimento.
Mas era apenas para minha inteface aqui… :slight_smile:

valeu galera !t++

fabiozoroastro

Pq vc não trabalha com interface?
Aí você implementa esta interface nas classes que você vai utilizar este método, aí então neste método, você consegue acessar todos métodos definidos na interface. Ex.:

Inter:

public interface Inter {
	public String getNome();
}

Classe:

public class Outra implements Inter{
    public static void main(String[] args) {
        meuMetodo(Outra.class);
    }
   
    public void meuMetodo(Class classe){
        classe.getNome();
    }
}

Sem nenhum erro de compilação, pois como é interface, você enxerga os métodos.
No seu caso os métodos de inserir de excluir e alterar.
:slight_smile:

Abraço.

Criado 14 de setembro de 2006
Ultima resposta 14 de set. de 2006
Respostas 15
Participantes 5