[RESOLVIDO] Problemas com instrução "return" (recursividade)

Olá pessoal, estou com um problema aqui, tenho um método q retorna um String, dentro desse metodo tem um laço "for" e dentro desse "for", se eu acho um determinado valor eu retorno ele com "return valor" acontece q ao invés de sair do metodo ele vai pra linha subsequente ao "for" e continua dentro do método. No caso o "return" tah com complexo de "break", to achando mto estranho pois nunca vi isso, ou eu desaprendi a programar ou o meu java tah louco…hehehe

Vou postar o código abaixo:

public String getCampoHibernate(String nomeTabela, String nomeCampo) {
		try {
			String ret = null;
			String[] array = Tpt200.class.getName().split("\\.");
			String path = "";
			for (int i = 0; i < array.length - 1; i++) {
				if(!path.isEmpty()){
					path+=".";
				}
				path += array[i];
			}
			String classe = nomeTabela.toString();
			if(!classe.contains("Id")){
				classe = nomeTabela.substring(0, 1).toUpperCase()
				+ nomeTabela.substring(1, 3).toLowerCase()
				+ nomeTabela.substring(3);
			}
			path += "." + classe;
			Class c = Class.forName(path);
			Method[] methods = c.getMethods();
			String name;
			String field;
			for (Method method : methods) {
				// Desconsidera quaisquer métodos de java.lang.Object
				// (especialmente getClass()).
				if ((method.getDeclaringClass() == java.lang.Object.class) ||
				// Desconsidera o método se requerer qualquer parâmetro.
						(method.getParameterTypes().length > 0)) {
					continue;
				}
				name = method.getName();
				field = "";
				if (name.startsWith("get") && name.length() > 3
						&& Character.isUpperCase(name.charAt(3))) {
					field = name.substring(3);
				} else if (name.startsWith("is") && name.length() > 2
						&& Character.isUpperCase(name.charAt(2))) {
					field = name.substring(2);
				}
				if (field.length() > 0) {
					if (field.length() == 1) {
						field = field.toLowerCase();
					} else if (!Character.isUpperCase(field.charAt(1))) {
						field = field.substring(0, 1).toLowerCase()
								+ field.substring(1);
					}
					if(nomeCampo.toLowerCase().equals(field)){
						if(!classe.contains("Id")){
							return field;
						}else{
							return classe.substring(0,1).toLowerCase() + classe.substring(1) + "." + field;
						}
					}
				}
			}
			if(!classe.contains("Id")){
				getCampoHibernate(classe+"Id", nomeCampo);
			}

		} catch (ClassNotFoundException e) {
			return null;
		}
		return null;
	}

Olhando no código, qdo ele entra na linha 49 ou 51 ao invés de sair do metodo ele passa a executar a linha 56 ainda dentro do método e no fim u único return q realmente sai do metodo eh o "return null" da linha 63.

Desde ja agradeço a atenção.

Tem um monte de If’s antes de chegar no return. Com certeza um deles está dando false sem você perceber.

Creio que esses dois sejam os suspeitos:

if (field.length() > 0) {
if(nomeCampo.toLowerCase().equals(field)){

Use o debug da sua IDE e veja o que realmente esta acontecendo!

Sim ja debuguei inúmeras vezes antes de postar, ele entra na linha onde está o “return” mas como disse, ao inves de sair do metodo ele pula pra fora do “for”, constatei isso debugando…

Debugando ja vi q ele não entra certinho nesses ifs e chega na instrução return.

Tem que inserir o comando [color=red]“break;” [/color] após o return;

Não tem não…

Algumas vezes passei por situações parecidas e na verdade o que acontece é que a classe não tinha sido recompilada, ai debug mostra as linhas, mas não está executando aquelas linhas…

Tente fazer um rebuild all. O Eclipse tem uma opção de Rebuild Auto, veja se está marcada…

Eu até pensei em fazer isso jamikas, dar um break e usar uma variável String de retorno retornando ao fim do método mas como eu uso recursão isso não ficaria mto bonito, teria q fazer mais algum teste sem nescessidade.

[quote=ignacio83]
Algumas vezes passei por situações parecidas e na verdade o que acontece é que a classe não tinha sido recompilada, ai debug mostra as linhas, mas não está executando aquelas linhas…

Tente fazer um rebuild all. O Eclipse tem uma opção de Rebuild Auto, veja se está marcada…[/quote]

Tentei dar um Clean e depois um Build no projeto e nada, inclusive o Rebuild Auto ja estava marcado…

Se ele não entra nesses if’s então ele nunca chega no return!!

[quote=rod.attack][quote=danielpk7]

Debugando ja vi q ele não entra certinho nesses ifs e chega na instrução return.
[/quote]

Se ele não entra nesses if’s então ele nunca chega no return!![/quote]

Foi mal cara, erro de digitação, quis dizer q ele entra certinho nos ifs, chega na linha do return e inexplicavelmente não sai do método, sai somente do “for” como se fosse um break.

Consegui resolver o problema. Como ja esperado, não era loucura do java, acontece q na linha 57 eu faço uma recursão o q coloca o mesmo metodo novamente na pilha de execução, na segunda chamada do método eu dou um return e ao invez de voltar pra classe q chamou o método ele volta pra ele mesmo normal pois foi ele q se chamou recursivamente. Resolvi colocando um return na linha 57 ficando assim: “return getCampoHibernate(classe+“Id”, nomeCampo);”. Agora q vi a burrice q tinha feito.
Obrigado a todos.