Estava tentando bolar uma maneira de utilizar métodos através um array…Vou tentar explicar.
Ao invés de escrever o método diretamente, eu colocaria uma string em seu lugar, uma constante.
Dessa forma criaria um vetor de Strings contendo os métodos que seriam utilizados. Na hora de usar um dos métodos eu usaria um índice do array.
Pra que né? Bom… Na aplicação que estou desenvolvendo isso me economizaria muitas linhas de código e tornaria
totalemte reaproveitavel para várias classes.
Exemplo ilustrativo de uso:
Normal
Integer cd = produto.getCdProduto();
Modo esquisito que não sei fazer mas que me seria excelente
Integer cd = (Integer) produto.ARRAY_METODOS[i];
Isso que está acima é um absurdo! Mas facilita para entenderem onde quero chegar… Creio que exista alguma forma de fazer o que estou querendo.
Acho que é mais por esse caminho:
Produto produto = new Produto();
Method[] method = Produto.class.getMethods();
Integer aux = (Integer) method[0].invoke(produto);
Mas esse “class.getMethods()” retorna todos métodos public (exceto o construtor), e me parece que nã há como eu definir o índice da maneira que eu quiser. Gostaria de colocar: Indice 0 = getValue(); Indice 1= getName etc…
[quote]public Method[] getMethods() throws SecurityException
Returns an array containing Method objects reflecting all the public member methods of the class or interface represented by this Class object, including those declared by the class or interface and those inherited from superclasses and superinterfaces. Array classes return all the (public) member methods inherited from the Object class. The elements in the array returned are not sorted and are not in any particular order. This method returns an array of length 0 if this Class object represents a class or interface that has no public member methods, or if this Class object represents a primitive type or void.[/quote]
Olhem o que está em negrito…
Estou aqui tentando uma forma…
Se agluém sabe como poderia solucionar este problema…
Olá, primeiramente um aviso… reflection é algo que envolve operações muito pesadas para a JVM, não use isto o tempo todo pois causará baixa performance.
Ok, indo para o que tu qr fazer…
Na real você pelo visto tem tudo, porém precisa ordenar os métodos de uma forma certa forma. Use o método sort da classe Arrays. Para ordenar da forma que você precisa use um Comparator que faça o que você precisa e use-o no método sort.
Você explicou o porquê mas ainda não ficou claro pra mim, e isso é importante pois alguém da comunidade pode te dar uma solução melhor que não siga necessariamante o caminho que você propôs.
Exemplifique como reflection [quote]me economizaria muitas linhas de código e tornaria totalemte reaproveitavel para várias classes.[/quote]
Obrigado pela dica… Vou analisar essa questão também.
Acho que selecionar e reordenar ao meu gosto desta forma: [quote]Use o método sort da classe Arrays. Para ordenar da forma que você precisa use um Comparator que faça o que você precisa e use-o no método sort.[/quote] é um caminho também… Vou implementar alguma coisa para ver como fica.
Obrigado pela ajuda!
Bom…É simplesmente por que todos os métodos terão somente constantes no lugar de “.getAlgumaCoisa()”…
Logo, com uma estrutura de repetição posso manipular os índices dos vetores que contém os métodos e tipo de dados (de retorno ou entrada).
Acho que é por aqui agora
[quote]java.lang.Classçã
public Method getMethod(String name, Class<?>… parameterTypes) throws NoSuchMethodException, SecurityException
Returns a Method object that reflects the specified public member method of the class or interface represented by this Class object. The name parameter is a String specifying the simple name of the desired method.[/quote]
Acho que esse negrito aí resolve um bocado do meu problema.
Obrigado pessoal pela ajuda! Vou continuar minha queima de neurônios aqui…
Com getDeclaredMethods vc pega os private tb…
e fazendo um while com suaClasse.getSuperClass()
vc pega métodos das classes-pai.
pois getDeclaredMethods só pega os métodos da classe, não de sua hierarquia,
ao contrario de getMethods que pega da hierarquia, mais não privates…
para invokar metodos privates use setAcessible(true)