getDeclaredMethods()

Pessoal estou com um problema com o getDeclaredMethods();, quando o chamo ele traz os métodos, na ordem certa, na ordem que eles foram criados, exemplo:

public class Bairro {
	
	private int iBairro;
	private String nome;
	
	public int getiBairro() {
		return iBairro;
	}
	public void setiBairro(int iBairro) {
		this.iBairro = iBairro;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	
	@Override
	public String toString() {
		return "Bairro [iBairro=" + iBairro + ", nome=" + nome + "]";
	}
	
}

Bairro.getDeclaredMethods();
Retorna getiBairro(), setiBairro, getNome(), setNome, toString(), na ordem que eles foram declarados corretamente.
Agora se eu crio uma nova Rua:

public class Rua {
	
	private int iRua;
	private String nome;
	private String tipo;
	
	public int getiRua() {
		return iRua;
	}
	public void setiRua(int iRua) {
		this.iRua = iRua;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		this.nome = nome;
	}
	public String getTipo() {
		return tipo;
	}
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}
	
	@Override
	public String toString() {
		return "Logradouro [iRua=" + iRua + ", nome=" + nome + ", tipo=" + tipo
				+ "]";
	}
}

Rua.getDeclaredMethods()
Retorna getiRua(), setiRua(), getNome(), setNome(), getTipo(), setTipo(), toString(), Correto não é?

Agora o problemas é se eu chamo na mesma classe Bairro.getDeclaredMethods(); e Rua.getDeclaredMethods();

Ele vai me retornar na ordem o primeiro método:
Retorna getiBairro(), setiBairro, getNome(), setNome, toString();

Agora o segundo ele retorna:
Retorna: getNome(), setNome(), getiRua(), setiRua(), getTipo(), setTipo(), toString();
Fora da ordem que os métodos foram criados.

Isso quebra toda a lógica que estou usando em meu código. Alguém sabe me dizer por que isso acontece? Tem alguma maneira de ordenar esses métodos?

Att.

O array Method[] retornado por getDeclaredMethods não deve, em hipótese alguma, refletir a ordem em que os métodos foram declarados no código fonte.

Portanto, você deve ordená-los de forma que fiquem do jeito que você quer.

É o que o Entaglement disse.

Você tem três alternativas:
a) Alterar sua lógica para não depender de ordenação;
b) Ordenar os métodos em ordem alfabética, e alterar sua lógica para trabalhar com essa ordem;
c) Criar uma annotation própria, para que o programador da classe defina explicitamente a ordem dos métodos a serem executados (ou defina dependências entre métodos).

A segunda alternativa geralmente é interessante só para scripts.

Ou, se for o caso, usar o getDeclaredMethod(String) e passar o nome do método que você tá querendo buscar.

Vou fazer por annotation. Vai servir muito bem para o que quero fazer:


Por enquanto ele está ordenando do jeito que quero!
Qualquer coisa pergunto aqui de novo.
Vlw pessoal.

[quote=pablosaraiva]Ou, se for o caso, usar o getDeclaredMethod(String) e passar o nome do método que você tá querendo buscar.

[/quote]
É que eu preciso passar por todos os getters e setters da minha classe, e eles precisam estar na ordem que foram declarados no fonte.