Ajuda interface!

Pessoal, eh o seguinte, eu estou desenvolvendo um sistema, e agora resolvi migra-lo para rmi, isso eu acho que vou fazer sem problema, o porem, eh que eu tenho que criar as interfaces apenas com as declaracoes dos metodos, exemplo

public class Bairro(){
        int id = 0;
        String nome = "";
 
        private String getNome(){
            return this.nome;
        }

       private int getId(){
            return this.id;
       }

       private setNome(String nome){
             this.nome=nome;
       }

      private setId(int id){
             this.id=id;
       }
}

e eu preciso gerar a interface para essa classe:

public interface BairroInterface{
      private String getNome();
      private int getId();
      private setNome(String nome);
      private setId(int id);
}

Sao muitas classes, há algum macete no Netbeans ou em qq outro lugar para gerar essas interfaces, ateh agora eu to copiando e colando e removendo o codigo…

Obrigado a todos…

[]s

Transformar classes em interfaces automaticamente !? acho melhor vc procurar por plugins ou implementações loucas por ai, pq uma ferramenta que preveja essa necessidade é dificil ;D

na verdade nao eh transformar uma classe em interface, e sim gerar uma interface, que nada mais sera que um arquivo contendo apenas as funcoes da classe, sem as devidas implementacoes…

nao acho que seja tao dificil de existir

Descobri um jeito:

Assim:

#javap NomeDaClasse

Sendo que eh o arquivo compilado, ele retorna algo assim:

public class servidor.CEP extends java.lang.Object implements interfaces.CEPInterface{
    public java.lang.String getCep();
    public void setCep(java.lang.String);
    public servidor.CEP(java.lang.String);
    public java.lang.String toString();
}

Que jah eh um grande passo para transformar na interface…

[]s

Olá kra…

Procurei algum plugin pra fazer isso e não achei também. Então eu estava dando uma olhada no artigo sobre reflection aqui no GUJ (http://www.guj.com.br/java.tutorial.artigo.10.1.guj) e acabei tendo a idéia de montar alguma coisa com reflection.

Olha só:

 import java.lang.reflect.*;
 
 public class Main {

     public static void main(String args[]) {
         try {
             Class cls = Class.forName("Bairro");
             Method methlist[] = cls.getDeclaredMethods();
             
             System.out.println("public interface " + cls.getSimpleName() + "{");
 
             for (int i = 0; i < methlist.length; i++) {
                 Method m = methlist[i];
                 
                 String metodoInterface = "";
                 
                 metodoInterface += Modifier.toString(m.getModifiers());	//Modificador
                 metodoInterface += " " + m.getReturnType().getName();						//Tipo de retorno
                 metodoInterface += " " + m.getName();							//Nome do método                
                 
                 Class parametros[] = m.getParameterTypes();				//Parâmetros
                 String params = "";
                 for (int j = 0; j < parametros.length; j++){
                	 if (j==0){
                    	 params = parametros[j].getName() + " p" + j;
                	 }else{
                    	 params += ", " + parametros[j].getName() + " p" + j;
                	 }
                 }
                 
               	 metodoInterface += "(" + params + ")";
                                  
                 Class exceptions[] = m.getExceptionTypes();
                 String expts = "";
                 for (int j = 0; j < exceptions.length; j++){
                	 if (j==0){
                		 expts = " throws " + exceptions[j].getName();
                	 }else{
                		 expts += ", " + exceptions[j].getName();
                	 }
                 }
                 
                 metodoInterface += expts + ";";
                 
                 System.out.println("\t" + metodoInterface);
             }
             System.out.println("}");
         }
         catch (Throwable e) {
             System.err.println(e);
         }
     }
 }

Montei a classe bairro com algumas coisas a mais para testar… exceptions por exemplo:

import java.io.FileNotFoundException;
import java.io.IOException;

public class Bairro {
	int id = 0;

	String nome = "";

	public String getNome() {
		return this.nome;
	}

	public int getId() {
		return this.id;
	}

	public void setNome(String nome) throws IOException, FileNotFoundException{
		this.nome = nome;
	}

	public void setId(int id) throws Exception{
		this.id = id;
	}
}

A saída de dados foi essa:

public interface Bairro{
	public java.lang.String getNome();
	public void setNome(java.lang.String p0) throws java.io.IOException, java.io.FileNotFoundException;
	public void setId(int p0) throws java.lang.Exception;
	public int getId();
}

Caso você queira que saía somente o nome da classe nos tipos de dados, troque as chamadas getName() por getSimpleName(). Mas depois passe, no caso do eclipse, organizando os imports.

Você pode melhor também isso e tentar montar um plugin no eclipse. Tem um artigo aqui no GUJ também explicando como fazer isso (http://www.guj.com.br/java.tutorial.artigo.41.1.guj).

Bem acho que é isso. Galera do GUJ, não sei se é recomendável ficar postando esse montão de código assim, ou se é melhor postar um arquivo. Por favor, qualquer coisa me avisem.

Abraços.

Se você estiver utilizando o Eclipse, não vai precisar de plug-in nenhum. O próprio Eclipse consegue extrair uma interface a partir de uma classe. Veja:
.
Passo 1: Escolha a classe da qual você que extrair uma interface. Dê uma olhada no código desta classe aqui, onde está circundado em vermelho. Estes trechos de código vão mudar… 8)


.
Passo 2: Agora, clique com o botão direito sobre sua classe (pode ser sobre o arquivo no package explorer, ou então sobre o nome da classe no texto mesmo) e escolha as opções marcadas na figura abaixo.

.
Passo3: Na janelinha que aparece, há verias opções que vão se refletir na interface extraída e na classe de onde esta foi extraída.
:arrow: Interface name: O nome que você deseja dar a interface que estamos criando a partir da classe selecionada. A nossa classe do exemplo se chama Bairro, e nossa interface se chamara IBairro.
:arrow: Use extracted interface type where possible: Marque essa opção para que o Eclipse troque referências, retornos, etc do tipo Bairro para IBairro, onde for possível.
:arrow: :arrow: Use extracted interface in instanceof expressions: O Eclipse vai pegar expressões instanceof envolvendo Bairro e o troca por IBairro
:arrow: Declare interface methods as ‘public’: Marcar esta opção fará com que os métodos gerados na interface IBairro sejam declarados explicitamente como public(Note que não há a necessidade de declarar um método de uma interface em Java como sendo public, pois o compilador já sub-entende que todos os métodos de uma interface são públicos)
:arrow: Declare interface methods as ‘abstract’: Marcar esta opção fará com que os métodos gerados na interface IBairro sejam declarados explicitamente como abstract(Note que não há a necessidade de declarar um método de uma interface em Java como sendo abstract, pois o compilador já sub-entende que todos os métodos de uma interface são abstratos)
:arrow: Members to declare in the interface: Aqui é onde você seleciona qual os métodos da classe Bairro irão ser “mapeados” para a interface IBairro. No nosso exemplos, escolhemos todos os métodos.
:arrow: Generate method comments: Marcar esta opção fará com que o eclipse adicione comentários acima de cada método da classe Bairro que seja uma implementação de um método da interface IBairro. O que vem escrito no comentário depende do que está configurado no seu Eclipse para comentários de métodos sobrescritos. No nosso exemplo, não vamos gerar comentários.
Clique em ok para que o eclipse gere a interface IBairro.

.
Passo 4: Note que houveram algumas mudanças no código da classe Bairro. Veja na figura os trechos ce código circundados em vermelho. A primeira de todas é que agora Bairro “dá um” implements em IBairro. As outras mudanças são reflexo das opções que escolhemos na janelinha anterior (“Use extracted interface type where possible” e “Use extracted interface in instanceof expressions”).

.
Passo 5: Agora estamos vendo como ficou a interface IBairro, gerada automaticamente pelo Eclipse, a partir da classe Bairro.

.
Espero que isso te ajude com sua tarefa e que também te sirva de incentivo a utilizar essa IDE fantástica que é o Eclipse :lol:
Divirta-se! :thumbup:

kra … fantástico!!!

não sabia dessa!!

parabéns aew pela dica…

Uau!!!

Otimo!!!

Muito obrigado galera…

Essa do eclipse é muito bacana…nao sabia tb :smiley:

Essa do eclipse é muito bacana…nao sabia tb :smiley: