Codificação Java mais rápida no Eclipse Galileo

Usando o Novo Gerador toString()

Aprenda a usar o novo recurso de geração de código toString() no Eclipse Galileo junto com a geração hashCode(), equals(), e setter/getter para reduzir a quantia de trabalho que envolve a construção da base de uma classe Java™ .

Nathan A. Good, Senior Information Engineer, Freelance Developer

Nathan GoodNathan A. Good vive na área de Twin Cities em Minnesota. Profissionalmente, ele realiza desenvolvimento de software, arquitetura de software e administração de sistemas. Quando não está gravando software, ele gosta de construir PCs e servidores, ler sobre e trabalhar com novas tecnologias e tentar convencer seus amigos de migrar para software livre. Ele escreveu e foi co-autor de muitos livros e artigos, incluindo Professional Red Hat Enterprise Linux 3, Regular Expression Recipes: A Problem-Solution Approach e Foundations of PEAR: Rapid PHP Development.



17/Dez/2009

Essa dica para gerar o código usa os novos recursos introduzidos no Eclipse Galileo. Porém, é possível usar algumas das técnicas abordadas aqui, — como a geração de getters e setters — em versões antigas do Eclipse, como por exemplo, Ganymede.

Visão Geral da Geração de Código

Dentre os recursos que eu utilizo diariamente no Eclipse, os itens no menu Origem para a geração de código estão no topo da lista. Demorei um tempo para aprender a usá-los de maneira eficiente, mas quando aprendi, eu já podia criar as classes Java bem mais rápido.

Por exemplo, quando eu criei uma nova classe, já não gastava mais tempo gravando setters e getters (acessadores). Eu não gravo a maioria dos construtores. Em vez disso, eu crio a classe e digito rapidamente as variáveis privadas que usarei na classe, como aquelas na Listagem 1.

Listagem 1. Variáveis Privadas
public class Automobile {

    private String make;
    private String model;
    private String year;

}

Ao concluir, eu clico em Origem > Gerar Getters e Setters e seleciono as variáveis privadas que digitei agora, que eu queria expor usando acessadores públicos. Para inicializar algumas delas usando um construtor, eu clico em Origem > Gerar Construtor usando Campos para criá-los rapidamente. Com alguns cliques de mouse, eu já tenho uma classe quase completa, dependendo do que eu quero fazer com ela (consulte a Listagem 2). O melhor de tudo, o código recém-criado seguirá as regras de formatação de código que eu configurei nas minhas preferências do Eclipse.

Listagem 2. Autocriação de Construtores e Acessadores
public class Automobile {

    private String make;
    private String model;
    private String year;

    public String getMake() {
        return make;
    }

    public Automobile(String make, String model, String year) {
        super();
        this.make = make;
        this.model = model;
        this.year = year;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getYear() {
        return year;
    }

    public void setYear(String year) {
        this.year = year;
    }

}

Além do código que pode ser gerado com os itens no menu de Origem, você pode gerar muitos códigos usando o atalho Ctrl+Space para gravar vários blocos comuns de código. Para calcular os nomes necessários a serem usados para gerar os blocos especificados, consulte a janela Preferências . Por exemplo, digitar lazy e depois pressionar as teclas Ctrl+Space gera um código Java que pode ser usado para carregamento lento.


Configurações para a Geração de Códigos

Modifique as configurações para a geração de códigos de novos métodos na janela Preferências em Java > Estilo de Código > Modelos do Código.

Figura 1. As preferências Java > Estilo de Código > Modelos do Código
As preferências Java > Estilo de Código > Modelos do Código

Codificar as Boas Práticas

Como um líder técnico de alguns projetos, eu identifiquei determinadas boas práticas para serem usadas no nosso projeto. Eu as coloquei nos modelos de código Java e disponibilizei-as para serem importadas pelos membros da equipe.

As configurações Java > Editor > Modelos do Código na janela Preferências lista os modelos por nome (veja a Figura 2). Procure os modelos fornecidos com o Eclipse. Você pode incluir seus próprios modelos e também importá-los.

Figura 2. As preferências Java > Editor > Modelos do Código
As preferências Java > Editor > Modelos do Código

Usando a Geração toString()

Um novo recurso no Eclipse Galileo é poder gerar os métodos toString() . Por padrão, o método toString() imprime uma representação da classe que pode realmente não mostrar as propriedades que deseja ver. Considere o método principal na Listagem 3.

Listagem 3. Imprimindo o Automóvel usando toString()
public class Main {
    public static void main(String[] args) {
        Automobile auto = new Automobile("Toyota", "Corolla", "1993");
        System.out.println(auto.toString());
    }
}

A saída desse aplicativo é mostrada na Listagem 4.

Listagem 4. Saída do MétodoMain
Automobile@77df38fd

Antes do Galileo, eu tinha que gravar o método toString() manualmente. Embora isso não seja vedado para essa pequena classe, se a classe tiver muito mais campos, isso iria demorar um pouco. Eu posso fazer mais do que apenas concatenar os valores: eu posso verificar se há nulos. Posso querer usar um StringBuilder para obter melhor desempenho. Mas com o Galileo, posso fazer tudo isso com Origem > Gerar toString(), como mostra a Figura 3.

Figura 3. Gerar toString()
Gerar toString()

Depois de clicar em Concluir, o novo método toString() assemelha-se à Listagem 5.

Listagem 5. Método toString() gerado automaticamente
...
    @Override
    public String toString() {
        return "Automobile [" + (make != null ? "make=" + make + ", " : "")
                + (model != null ? "model=" + model + ", " : "")
                + (year != null ? "year=" + year : "") + "]";
    }
...

Agora, quando o método principal é executado, a saída será semelhante à seguinte na Listagem 6.

Listagem 6. Saída do método toString() gerado automaticamente
Automobile [make=Toyota, model=Corolla, year=1993]

Formatando a Cadeia de Caracteres

Mesmo se a saída mostrada na Listagem 6 for muito mais descritiva do que a saída original na Listagem 4, poderá ser melhor fazer um ajuste no formato para torná-lo ainda mais legível, como "1993 Toyota Corolla (Automobile)." Os modelos customizados permitem ajustar a saída gerada para o método toString() .

Remova o método toString() e clique em Origem > Gerar toString() novamente. Dessa vez:

  1. Clique em Editar ao lado da lista suspensa Formato de Cadeia .
  2. Clique em Novo.
    Figura 4. Incluindo um Novo Formato
    Incluindo um Novo Formato
  3. Digite algo como ${member.value} ${otherMembers} (${object.className}) em Padrão, forneça um nome e clique em OK.

Com o novo padrão selecionado, clique em OK em Gerar toString(). O novo código será semelhante ao seguinte na Listagem 7.

Listagem 7. Método toString() Atualizado
...
    @Override
    public String toString() {
        return (make != null ? make + " " : "")
                + (model != null ? model + " " : "")
                + (year != null ? year : "") + " (Automobile)";
    }
...

Agora, ao executar o método principal, a saída toString() do objeto Automobile será semelhante a da Listagem 8

Listagem 8. Saída do método toString() do objeto Automobile
Toyota Corolla 1993 (Automobile)

Trabalhando com Matrizes

O gerador toString() também permite manipular arrays. Considere a Listagem 9, que mostra a nova matriz de cadeias de caracteres chamada opções.

Listagem 9. Opções da Matriz de Cadeias de Caracteres
        Automobile auto = new Automobile("Toyota", "Corolla", "1993");
        String[] options = new String[] {
                "Automatic Transmission",
                "Power Brakes",
                "Power Windows"
        };
        // new generated method after adding private String[] options;
        auto.setOptions(options);
        System.out.println(auto.toString());
        // prints this:
        // Toyota Corolla [Ljava.lang.String;@defb836 1993 (Automobile)

Normalmente, o método toString() nativo imprime uma representação da matriz assim como a representação orignal do objeto, sem mesmo mostrar o conteúdo. Entretanto, a opção Listar conteúdo de arrays em vez de usar toString nativo altera isso. Com essa opção selecionada, o método toString() pode ser gerado novamente e a nova saída será semelhante à da Listagem 10

Listagem 10. Saída do método toString() gerado novamente
Toyota Corolla [Automatic Transmission, Power Brakes, Power Windows] 1993 (Automobile)

Limitando a Saída

Se alguma das arrays for muito grande, você poderá limitar o conteúdo impresso ao selecionar Limitar número de itens em arrays/coletas/mapas e configurar o limite (veja a Figura 5). Fazer isso impede que o método toString() imprima a maior parte da saída.

Figura 5. Imprimindo Conteúdo Limitado das Matrizes
Imprimindo Conteúdo Limitado das Matrizes

Consulte a Listagem 11 como um exemplo do limite configurado para 2.

Listagem 11. Limitando a Matriz de Conteúdo para 2
Toyota Corolla [Automatic Transmission, Power Brakes] 1993 (Automobile)

Usando hashCode() e equals()

Usar a geração do Eclipse Galileo hashCode() e equals() é muito útil quando desejar criar regras que tornam seus objetos iguais com base nos valores reais nos campos. Isso é diferente do comportamento equals() padrão porque até mesmo os objetos com valores idênticos, por padrão, não serão iguais. Considere o código na Listagem 12.

Listagem 12. O comportamento padrão do método equals()
public class Main {
    public static void main(String[] args) {
        Automobile auto = new Automobile("Toyota", "Corolla", "1993");
        String[] options = new String[] {
                "Automatic Transmission",
                "Power Brakes",
                "Power Windows"
        };
        auto.setOptions(options);
        
        Automobile auto2 = new Automobile("Toyota", "Corolla", "1993");
        String[] options2 = new String[] {
                "Automatic Transmission",
                "Power Brakes",
                "Power Windows"
        };
        auto2.setOptions(options2);
        
        System.out.println("Autos 1 and 2 are equal():  " + auto.equals(auto2));
        
    }
}

Embora todas as propriedades sejam configuradas para valores idênticos, o código imprime Auto 1 and 2 are equal(): false quando executado.

Para alterar esse comportamento, clique em Origem > Gerar hashCode() e equals() para gerar a nova versão do método equals() que compara todos os campos, como mostrado abaixo.

Listagem 13. Comparando todos os campos no novo método equals()
    @Override
    public int hashCode() {
        // snipped...
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Automobile other = (Automobile) obj;
        if (make == null) {
            if (other.make != null)
                return false;
        } else if (!make.equals(other.make))
            return false;
        if (model == null) {
            if (other.model != null)
                return false;
        } else if (!model.equals(other.model))
            return false;
        if (!Arrays.equals(options, other.options))
            return false;
        if (year == null) {
            if (other.year != null)
                return false;
        } else if (!year.equals(other.year))
            return false;
        return true;
    }

Agora, ao executar o código, os dois objetos são comparados usando o método equals() e eles são iguais.

Outro novo recurso no Eclipse Galileo é a possibilidade de gerar blocos para a instrução if . Esse novo recurso é legal se você ainda não tiver Origem > Limpeza configurado para altear as instruções if de linha única nos blocos. Evitar as instruções if de linha única é geralmente considerado uma boa prática, assim, muita gente passa a fazer isso no código.


Conclusão

Os novos recursos no Galileo para gerar os métodos toString() complementam a possibilidade existente do Eclipse para gerar a maioria do código Java. Na prática, é possível saber qual código você tem que digitar e qual código pode ser gerado, evitando perdas de trabalho.

Recursos

Aprender

Obter produtos e tecnologias

Discutir

  • Os Newsgroups da Plataforma Eclipse devem ser a primeira parada para discutir questões referentes ao Eclipse. (Selecionar isso abrirá o programa leitor de notícias Usenet e abrirá eclipse.platform.)
  • Os Newsgroups Eclipse possui muitos recursos para aqueles que quiserem usar e estender o Eclipse.
  • Participe dos Blogs do developerWorks e entre na comunidade developerWorks.

Comentários

developerWorks: Conecte-se

Los campos obligatorios están marcados con un asterisco (*).


Precisa de um ID IBM?
Esqueceu seu ID IBM?


Esqueceu sua senha?
Alterar sua senha

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


A primeira vez que você entrar no developerWorks, um perfil é criado para você. Informações no seu perfil (seu nome, país / região, e nome da empresa) é apresentado ao público e vai acompanhar qualquer conteúdo que você postar, a menos que você opte por esconder o nome da empresa. Você pode atualizar sua conta IBM a qualquer momento.

Todas as informações enviadas são seguras.

Elija su nombre para mostrar



Ao se conectar ao developerWorks pela primeira vez, é criado um perfil para você e é necessário selecionar um nome de exibição. O nome de exibição acompanhará o conteúdo que você postar no developerWorks.

Escolha um nome de exibição de 3 - 31 caracteres. Seu nome de exibição deve ser exclusivo na comunidade do developerWorks e não deve ser o seu endereço de email por motivo de privacidade.

Los campos obligatorios están marcados con un asterisco (*).

(Escolha um nome de exibição de 3 - 31 caracteres.)

Ao clicar em Enviar, você concorda com os termos e condições do developerWorks.

 


Todas as informações enviadas são seguras.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=80
Zone=Software livre
ArticleID=457490
ArticleTitle=Codificação Java mais rápida no Eclipse Galileo
publish-date=12172009