Una propuesta ante el equipo de desarrollo de OpenJDK agregaría clases ocultas a Java. Una capacidad destinada a mejorar la eficiencia de las implementaciones de lenguajes integrados en la JVM.
Proponen agregar clases ocultas a Java, cuya integración servirá para ser utilizada por los frameworks que generan las clases cuando se ejecutan y utilicen indirectamente vía reflejos. De acuerdo a la Propuesta de Mejora JDK, las clases ocultas son clases que no pueden ser utilizadas directamente por el bytecode de otras clases.
Una clase oculta se puede definir como miembro de un nido de control de acceso y puede ser levemente referenciada por el cargador de la clase. Todavía no hay un calendario para cuándo pueden aparecer clases ocultas en Java.
Proponen agregar clases ocultas a Java
Al explicar la motivación detrás del plan, la propuesta establece que muchas implementaciones de lenguaje basadas en la JVM aprovechan la generación dinámica de clases para lograr eficiencia y flexibilidad. El compilador javac de Java, por ejemplo, no traduce una expresión lambda en un archivo de clase dedicado en el momento de la compilación. En cambio, emite un bytecode para generar e instanciar dinámicamente una clase.
Del mismo modo, los lenguajes JVM que no son Java a menudo implementan características de orden superior mediante el uso de proxys dinámicos para generar clases dinámicamente.
Los implementadores de estos lenguajes generalmente quieren que una clase que se generó dinámicamente sea parte de una clase existente generada estáticamente. Y que tenga propiedades deseables de las clases generadas dinámicamente, como la no detección y el control de acceso. Sin embargo, las API estándar que definen una clase no se diseñaron con estos propósitos en mente.
Si las API estándar pudieran definir clases ocultas, no detectables con un ciclo de vida limitado. Entonces los frameworks dentro y fuera del JDK que generan clases dinámicamente, podrían definir clases ocultas. Mejorando la eficiencia del lenguaje JVM.
Los objetivos de la propuesta de clases ocultas incluyen:
- Permitir que los marcos definan las clases como detalles de implementación no detectables del marco, de modo que otras clases no puedan vincularlos ni descubrirlos mediante la reflexión.
- Desaprobación de la API no estándar, misc.Unsafe :: defineAnonymousClass, con el objetivo de eliminarla en una versión futura.
- No cambiar el lenguaje Java en absoluto.
- Soporte para extender un nido de control de acceso con clases no detectables.
- Admite la descarga agresiva de clases no detectables, dando a los marcos la flexibilidad para definir según sea necesario.