Sarebbe possibile creare una classe durante l'esecuzione in runtime?

2

Questo potrebbe essere un po 'poco realistico che ti chiederò comunque. Sarebbe possibile creare letteralmente una nuova classe durante l'esecuzione del tempo di esecuzione, non intendo una nuova istanza, voglio dire una nuova classe creata dal codice stesso.

In realtà sto usando reflection in java, posso ottenere il nome del campo della classe e il metodo, trovo questo potente.

Quindi mi chiedevo se sarebbe stato possibile creare una nuova classe durante l'esecuzione del tempo di esecuzione.

    
posta Bob Reynolds 22.07.2016 - 12:40
fonte

2 risposte

3

Sì, questo non è solo possibile ma in realtà abbastanza comune. È possibile creare il proprio codice byte e inserirlo in un'istanza ClassLoader per trasformarlo in un oggetto Class e quindi utilizzare reflection per crearlo e manipolarlo. C'è una libreria chiamata cglib che è comunemente usata per renderla più facile, e molti framework e librerie (es. Spring e Hibernate) usano questo approccio per implementare alcune delle loro funzionalità.

    
risposta data 22.07.2016 - 12:47
fonte
1

Sì, è possibile, ma perché senti di averne bisogno?

La riflessione ha i suoi usi, certo, ma con Great Power arriva alla grande ... Opportunità di spararsi nei piedi in modi nuovi ed eccitanti (e proprio quando meno te l'aspetti).

Non sono molte le cose che in realtà hanno bisogno di Reflection, quindi suggerirei di trovarti nella casella degli strumenti per quella particolare chiave su una base regolare , dovresti davvero chiedertelo "perché?".

Se non altro, Reflection ti consente di sfondare "l'interfaccia" del codice di altre persone, che è adorabile ; fino al punto che cambiano l'implementazione interna della loro classe (che sono perfettamente nel loro diritto di fare). Chiunque abbia programmato la sua interfaccia pubblicata va bene; il loro codice continuerà a funzionare. Il tuo codice basato su Reflection, che ora sta cercando cose che non esistono più, si bloccherà e brucerà.

    
risposta data 22.07.2016 - 14:32
fonte

Leggi altre domande sui tag