2012-05-23 8 views
6

Ho una classe Java simile a quello seguente:Rendere non-finale Java Class via API Reflection

public final class Node { 
    public Node() {} 
} 

ho imparato già come cambiare cambiare l'accessibilità dei campi 'finali' tramite l'API di riflessione, ma questo è anche possibile per le classi? Posso trasformare una classe finale in una classe non finale in fase di runtime?

risposta

4

È possibile riscrivere un file di classe utilizzando una libreria come ASM.

Ci può essere inutile modificando lo stato final di una classe in esecuzione come deve essere non-finale in fase di compilazione per compilare una sottoclasse.

+3

Non so quale caso d'uso user982247 avesse in mente, ma provare a proxy un oggetto è una ragione per cui si potrebbe voler provare a cambiare una classe in non-finale in fase di esecuzione, senza avere problemi di compilazione. –

1

Non vedo come questo possa funzionare, perché il compilatore verificherà se la classe si sta tentando di rendere non-finale in fase di compilazione. Riceverai un errore se proverai ad ereditarlo.

Penso che sia giusto porre la domanda se sei curioso, ma la domanda più grande da porsi è perché vuoi farlo? Reflection ti permette di fare un sacco di cose per arrivare in finale, privato, ecc., Ma questo non significa che sia una buona idea. Se il progettista di una libreria di terze parti pensava che la finale fosse una buona idea, si potrebbe essere ben consigliati di onorarlo.