Fazer um comparator generico sem reflexão!? é possível?
Reflection
7 Respostas
Ixi… agora não me ocorre como não?! só se vc for comparar igualando a instnacia só;; tipo ob1 == ob2… mas não é bom…
Pode, claro.
Você pode fazer por sobre-escrita do método equals, ou pode sobre-escrever o toString (meio POG esse aqui, mas dá…), sobre-escrita do hashCode.
Bem, se veio de outra linguagem como Ruby (método de atribuição, multiplicação, … ), então a resposta é mais simples: Java não tem isso. ^^
Abraços
mais especificamente:
Criar um método genérico de ordenação para uma lista de um mesmo tipo de bean, tomando como critério de ordenação um atributo qualquer do bean.
Exemplo:
A lista1 contém vários beans da classe “PessoaBean”. A classe “PessoaBean” tem o método “getNome”.
A lista2 contém vários beans da classe “LivroBean”. A classe “LivroBean” tem o método “getEditora”.
Criar um método para ordenar por “nome” a lista1. O mesmo método, sem nenhuma alteração, deve possibilitar a ordenação de qualquer outra lista de beans como, por exemplo, a lista 2 por “editora”.
chamar um método dinamicamente sem Reflection? (para fazer a comparação), isso não dá né filhote. :S
Agora oque voce pode tentar fazer nesse caso, é criar uma interface, por a galera pra implementar ela, criar um método tipo: “int comparate(String type, Object obj)”, saka??? e ai dentro desse método cada classe ter sua implementação.
Não é o jeito mais elegante, mas rola… Mas… porque não usar reflection? Ou é só curiosidade?
Falows
mais especificamente:Criar um método genérico de ordenação para uma lista de um mesmo tipo de bean, tomando como critério de ordenação um atributo qualquer do bean.
Exemplo:
A lista1 contém vários beans da classe “PessoaBean”. A classe “PessoaBean” tem o método “getNome”.
A lista2 contém vários beans da classe “LivroBean”. A classe “LivroBean” tem o método “getEditora”.Criar um método para ordenar por “nome” a lista1. O mesmo método, sem nenhuma alteração, deve possibilitar a ordenação de qualquer outra lista de beans como, por exemplo, a lista 2 por “editora”.
Usando o conceito de propriedades é tranquilo fazer isto…
O conceito de propriedades, usado por exemplo dos objetos swing, definem que cada atributo tera uma constante com seu nome, dae vc tera um metodo Comparator getPropertie(String propertieName); dae vc cria um Comparator que ordene este cara, ele sempre recebe o nome da propriedade e usa para recuperar a propriedade e comparar… saca?
Use isto aqui.
Ele faz as coisas sangrentas de “reflection” por você, deixando para você só a parte boa.
BeanComparator usa introspection que usa reflection…