Questa è una continuazione della domanda pubblicata in: How to load a jar file at runtimeCome si accede a un metodo da un jar esterno in fase di runtime?
Sono incerto su come continuare il livello di chiamata del metodo. Dalla mia comprensione, dall'oggetto clazz, avrei usato getMethod o getDeclaredMethod per ottenere un oggetto Method da cui chiamerei invoke. Ovviamente, invoke richiede un'istanza. Allora sarebbe quello che viene chiamato doRun nel codice di esempio?
È necessario eseguire la chiamata al metodo doRun.run() anche se si desidera eseguire un metodo diverso da quello principale (presupponendo che sia principale sull'oggetto doRun chiamato con l'invocazione di esecuzione)?
Solo per ulteriori chiarimenti sul post originale, chiedo: DoRun.run() avvia un nuovo thread eseguendo l'istanza dell'oggetto classe di tipo clazz?
Grazie per aver contribuito a chiarire questo per me.
Ho guardato "how-should-i-load-jars-dynamically-at-runtime" (mi dispiace, consentito solo un collegamento ipertestuale), tuttavia questo sembrava violare l'ammonizione di classe.new malvagità Instance nel primo post I riferimento.
Quindi, se capisco il tuo commento seguendo il codice, con un'interfaccia, so quali metodi sono disponibili e posso scrivere codice chiamando il metodo direttamente dopo aver lanciato l'oggetto istanza in modo appropriato. È vero? – Todd
Ovviamente, questo presuppone che il codice originale sia stato compilato usando l'interfaccia, non uno che creo in seguito e cerco di eseguire il cast dell'istanza. – Todd
@Todd - sì, ce l'hai. L'approccio all'interfaccia (o qualche altro tipo di implementazione di tipo forte) viene spesso utilizzato con plugin in cui il codice è stato scritto per essere istanziato dinamicamente. Se stai facendo introspezione e invocazione su classi arbitrarie, questa non è un'opzione. – McDowell