Membros estáticos em classes internas
Defina membros estáticos em classes internas sem precisar de classes aninhadas estáticas.
Comparação 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();
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Mais flexibilidade
Classes internas agora podem ter membros estáticos quando necessário.
Estado compartilhado
Rastreie estado compartilhado entre instâncias de uma classe interna.
Liberdade de design
Não é preciso promover para classe aninhada estática só por causa de um campo estático.
Abordagem Antiga
Necessário usar classe aninhada estática
Abordagem Moderna
Membros estáticos em classes internas
Desde o JDK
16
Dificuldade
Intermediário
Suporte JDK
Membros estáticos em classes internas
Disponível
Amplamente disponível desde o JDK 16 (março de 2021)
Como funciona
Antes do Java 16, apenas classes aninhadas estáticas podiam conter membros estáticos. Classes internas (não estáticas) não podiam ter estáticos porque exigiam uma instância envolvente. O Java 16 flexibiliza essa restrição, permitindo campos estáticos, métodos e até tipos aninhados em classes internas.
Documentação Relacionada