/ / getClass (). getMethod („name“, neznáme) - java, reflexia, metódy, getmethod

získať metódou ("meno", neznámy) - java, reflexia, metódy, getmethod

Pre skutočne abstraktnú aplikáciu, ktorú vytváram, musím volať metódy bez toho, aby som poznal ich typy parametrov a poznal len parametre v tvare String.

Povedzme, že mám metódu;

getNames(String like, int amount);

a mám skupinu reťazcov obsahujúcich 2 parametre, takže povedzme, že mám;

String[] params = new String[] {"jack", "25"};

Existuje nejaký spôsob, ako môžem získať a vyvolať túto metódu pomocou poľa params?

odpovede:

2 pre odpoveď č. 1

Mohli by ste to skúsiť


String[] params = new String[] {"jack", "25"};
Object[] realParams = new Object[params.length];
Method[] methods = getClass().getMethods();
for (Method method : methods) {
if (method.getParameterTypes().length == params.length) {
for (int i = 0; i < method.getParameterTypes().length; i ++) {
Class<?> paramClass = method.getParameterTypes()[i];
if (paramClass = String.class) {
realParams.add(param);
} else if (paramClass == Integer.class || paramClass == Integer.TYPE) {
realParams.add(Integer.parseInt(param));
} else if (other primitive wrappers) {
...
} else {
realParams.add(null); // can"t create a random object based on just string
// you can have some object factory here, or use ObjectInputStream
}
}
break; // you can continue here if the parameters weren"t converted successfully,
//to attempt another method with the same arguments count.
}
}

1 pre odpoveď č. 2

Znie to ako metaprogramovanie. Možno budete chcieť pozrieť do Groovy / Scala, ak ste nastavený na platforme JVM.


0 pre odpoveď č. 3

Mali by ste sa pozrieť do rozhraní API na reflexiu Java(aj keď si to určite nepamätám) vám môžem dať informácie, ktoré potrebujete na zistenie rôznych typov parametrov. Potom by ste mali opakovať zoznam a inteligentne prenášať každý z nich na základe toho, čo povedal API na reflexiu. o metóde.


0 pre odpoveď č. 4

Pre dynamické programovanie použite dynamický programovací jazyk. Java nie je pre tento druh vecí vhodná.

Napriek tomu sa pozrite na reflexné API, ale ak plánujete robiť veľa podobných programov pre svoju aplikáciu, zvážte ďalšie alternatívy.