2012-05-23 14 views
6

tengo una clase Java similar a la siguiente:sin ánimo de final de la clase de Java a través de API de reflexión

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

ya he aprendido cómo cambiar cambiar la accesibilidad de los campos 'finales' a través de la API de reflexión, pero, ¿esto también es posible para las clases? ¿Puedo convertir una clase final en una clase no final en tiempo de ejecución?

Respuesta

4

Puede volver a escribir un archivo de clase utilizando una biblioteca como ASM.

No tiene sentido cambiar el estado de final de una clase en tiempo de ejecución, ya que debe ser no final en el momento de la compilación para compilar una subclase.

+3

No sé qué uso tenía el usuario user982247, pero tratar de usar un proxy de un objeto es una razón por la que uno podría querer cambiar una clase a no final en tiempo de ejecución, sin tener problemas de compilación. –

1

No veo cómo esto puede funcionar, porque el compilador verificará si la clase que intentas hacer no es definitiva en el momento de la compilación. Obtendrá un error si intenta heredar de él.

Creo que está bien hacer la pregunta si tiene curiosidad, pero la pregunta más importante es ¿por qué quiere hacer esto? La reflexión te permite hacer muchas cosas para moverte en modo final, privado, etc., pero eso no significa que sea una buena idea. Si el diseñador de una biblioteca de un tercero pensó que la final era una buena idea, es recomendable que la respete.

Cuestiones relacionadas