Miembros estáticos en clases internas
Define miembros estáticos en clases internas sin necesidad de clases estáticas anidadas.
Comparación de Código
✕ Java 8
class Library {
// Must be static nested class
static class Book {
static int globalBookCount;
Book() {
globalBookCount++;
}
}
}
// Usage
var book = new Library.Book();
✓ Java 16+
class Library {
// Can be inner class with statics
class Book {
static int globalBookCount;
Book() {
Book.globalBookCount++;
}
}
}
// Usage
var lib = new Library();
var book = lib.new Book();
¿Ves un problema con este código? Cuéntanos.
Por qué gana la forma moderna
Más flexibilidad
Las clases internas ahora pueden tener miembros estáticos cuando sea necesario.
Estado compartido
Rastrea estado compartido entre instancias de una clase interna.
Libertad de diseño
No es necesario promover a clase estática anidada solo por un campo estático.
Enfoque Antiguo
Se requiere clase estática anidada
Enfoque Moderno
Miembros estáticos en clases internas
Desde JDK
16
Dificultad
Intermedio
Soporte JDK
Miembros estáticos en clases internas
Disponible
Ampliamente disponible desde JDK 16 (marzo 2021)
Cómo funciona
Antes de Java 16, solo las clases estáticas anidadas podían contener miembros estáticos. Las clases internas (no estáticas) no podían tener estáticos porque requerían una instancia envolvente. Java 16 relaja esta restricción, permitiendo campos estáticos, métodos e incluso tipos anidados en clases internas.
Documentación Relacionada