toString com reflection

Fala ae galera, blz?

Estou com um probleminha:
Fiz um VO abstrato implementando o método toString. Esse metodo pega todos os campos públicos da classe e exibe os seus nomes e valores. Até aqui tudo bem.
O problema é o seguinte, quando um VO tem uma referencia para ele mesmo, o método toString entra em um looping infinito!
Como posso resolver isso, alguem tem alguma idéia?

Super abraço pra todos!

PS: Implementação do método

[code] public String toString() {

	String mask = "[{0}] {1} ";
	String values = "";

	Class cls = getClass();
	Field[] fields = cls.getDeclaredFields();

	for (int i = 0; i < fields.length; i++) {

		String fieldName = fields[i].getName().substring(0, 1)
				.toUpperCase()
				+ fields[i].getName().substring(1,
						fields[i].getName().length());

		String get = "get";

		try {
			Method method = cls.getMethod(get + fieldName, new Class[] {});
			Object obj = method.invoke(this, new Object[] {});

			values += MessageFormat.format(mask, new String[] {
					fields[i].getName(), String.valueOf(obj) });
		} catch (Exception e) {
		}
	}

	return values;
}[/code]

Usa um Set para guardar quais valores já foram lidos.

Ou verifique se o tipo do Field não é o tipo do VO.

Todos os seus VOs estendem essa classe abstrata so para herdarem o toString()?

Acho que uma solução melhor seria você criar uma classe ToStringBuilder (eh um exemplo) para fazer esse trabalho e delegar o toString() dos VOs para essa classe.

Um exemplo:

[code]class ToStringBuilder {
public static String myToString(Object o) {
// TODO: Aqui fica a sua implementacao de toString
}
}

class MeuVO {
public String toString() {
return ToStringBuilder.myToString(this);
}
}[/code]