Language Intermediário

Defina membros estáticos em classes internas sem precisar de classes aninhadas estáticas.

✕ 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.
🔓

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
Membros estáticos em classes internas
Disponível

Amplamente disponível desde o JDK 16 (março de 2021)

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.

Compartilhar 𝕏 🦋 in