2009-11-18 9 views
5

Per un'applicazione veramente astratta che sto creando, devo chiamare i metodi senza conoscere i loro tipi di parametri e solo conoscendo i parametri in una forma String.getClass(). GetMethod ("nome", sconosciuto)

Diciamo che ho il metodo;

getNames(String like, int amount); 

e ho una matrice di stringhe contenente i 2 parametri, quindi diciamo che ho;

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

C'è un modo che posso ottenere e invocare questo metodo utilizzando l'array params?

risposta

2

Si potrebbe provare


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. 
    } 
} 
+0

Come posso trasmettere le stringhe al parametro richiesto quando conosco il metodo, puoi fare un esempio? – Thys

+0

Con questa soluzione non è possibile avere due metodi con lo stesso numero di argomenti. È impossibile farlo in questo modo, a meno che non ti venga detto il nome del metodo da eseguire o i tipi di parametri che vuoi usare. –

+0

Controlla il mio aggiornamento – Bozho

1

Suona come metaprogrammazione. Potresti voler esaminare Groovy/Scala se sei impostato sulla piattaforma JVM.

0

Cerca nelle API di riflessione Java, dovrebbero (anche se non ricordo di sicuro) essere in grado di fornirti le informazioni necessarie per accertarti dei diversi tipi di parametri. Dovresti quindi scorrere l'elenco e creare in modo intelligente ciascuno in base a ciò che l'API di reflection ti ha detto sul metodo.

0

Per la programmazione dinamici utilizzano un linguaggio di programmazione dinamica. Java non è adatto per questo tipo di cose.

Dai un'occhiata all'API di riflessione comunque, ma se hai intenzione di fare un sacco di programmi come quello per la tua applicazione, considera altre alternative.

Problemi correlati