hai ragione non colgo in profondità... sono programmatore da anni ma di java sono nubie... e non conosco i comandi (sto ancora studiando!!!)Originariamente inviato da andbin
No, la strada è questa ... intendo: la reflection.
Poi è chiaro che se il nome della classe lo "cabli" nel sorgente ... tanto generico/flessibile non lo è il tuo codice. Se vuoi fornire alla applicazione il nome della classe come parametro o in un file di configurazione è un altro livello. Se vuoi che la tua applicazione possa gestire più "motori" di AI in stile a plug-in (ad esempio che possa scoprire qualunque jar compatibile che è stato copiato in una cartella X nota alla applicazione) allora è ancora un altro ulteriore livello più complesso.
Poi c'è la questione di cosa il "plug-in" deve esporre alla applicazione. E questo dipende principalmente da cosa deve fare il plug-in in relazione a cosa la applicazione gli permette di fare.
Ho comunque l'impressione che non riesci a cogliere la questione in profondità. Il punto non è tanto (e solo) caricare una classe, rintracciare un metodo (noto o no) ed invocarlo.
la classe l'ho caricata con :
Class c = Class.forName("paolo");
con questi comandi :
Method m[] = c.getDeclaredMethods();
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
leggo i metodi e quindi vuol dire che la classe è caricata bene...
poi con questo :
Object retobj = c.newInstance();
lancio la classe e me la legge bene perchè esegue il costruttore.
a questo punto dovrei eseguire un metodo e credo si usi "invoke();" ma non so come....
mi puoi scrivere un esempio... di
metodo.invoke() ; mi dice che () non va bene, ma in mezzo cosa ci passo?
grazie