WEBCODELOG

free codes, enjoy

Automatizando o toString() versão 1.0.1

without comments

É comum sobrescrever o método toString() da classe Object, facilita em situações como quando é necessário saber o conteúdo de um Bean, por exemplo. Sobretudo, reescrever este método poderá ser trabalhoso se você tem muitos atributos e cansativo, se você o fizer para todos os seu beans.

Pensando nisso resolvi criar uma classe útil que mostre todos os atributos Privates da sua classe juntamente com seus respectivos valores. Veja o código abaixo, em um bean eu reescrevi o método toString() fazendo um looping em todos os atributos:

public class Equipamento implements Serializable {
private String modelo;
private String marca;
private String descricao;
private Date fabricacao;

/*** getters/setters ocultados **/

public String toString(){
StringBuffer b = new StringBuffer();
// Obtem todos os atributos da classe
Field[] fields = this.getClass().getDeclaredFields();
b.append( this.getClass().getName() );
b.append( " { \n" );
for (int i = 0; i < fields.length; i++) {
try {

Field field = fields[i];
b.append( field.getName() );
b.append( " = " );
b.append( field.get(this) );
b.append("\n");

} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
b.append( " } " );
return b.toString();
}
}

A reescrita do método acima resolve parcialmente o nosso problema, além de não atender aos tipos de dados complexos, você terá que fazer o famoso copy-paste para todas as classes que forem implementa-lo.

Voltamos então para nossa idéia inicial, então criaremos uma classe útil para que a automatização do toString(), sendo assim, qualquer classe poderá utiliza-la. Saiba que não iremos ter acesso aos atributos assinados com o modificador Private da classe que deseja utilizar o toString customizado, para resolver tal problema utilizaremos os Métodos públicos, ignorando os métodos da classe Object e aproveitando apenas os métodos acessores.


public final class ToStringUtil{
/*** ocultado ***/

public static String getText(Object object){
StringBuffer buffer = new StringBuffer("");
Method[] methods = object.getClass().getMethods();

for( Method method : methods ){
//
// verifica se o método é um Getter de attributo da classe
//
if( isGetterFieldMethod(method, object.getClass()) ){
buffer.append( getResumeNameMethod( method.getName() ) );
buffer.append("   = ");
buffer.append( getMethodReturnValue(object, method) );
buffer.append( NEW_LINE );
}

}// for each end

return buffer.toString();
}

/*** ocultado ***/
}

Esta versão ainda continua com o problema de tipos complexos, assim que eu for melhorando vou disponibilizar por aqui.

Download
Versão completa ToStringUtil 1.0.1.

Referência
Reflection

Bookmark and Share

Written by Luciano

março 6th, 2009 at 3:45 pm

Posted in Programação

Tagged with ,

Leave a Reply