Language Средний

Определять статические члены во внутренних классах без использования статически вложенных классов.

✕ 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();
Заметили проблему в этом коде? Сообщите нам.
🔓

Больше гибкости

Внутренние классы теперь при необходимости могут иметь статические члены.

🧩

Общее состояние

Отслеживать общее состояние между экземплярами внутреннего класса.

📐

Свобода проектирования

Не нужно повышать до статически вложенного класса из-за одного статического поля.

Старый подход
Необходимость статически вложенного класса
Современный подход
Статические члены во внутренних классах
Начиная с JDK
16
Сложность
Средний
Статические члены во внутренних классах
Доступно

Доступно в JDK 16 (март 2021)

До Java 16 только статически вложенные классы могли содержать статические члены. Внутренние (нестатические) классы не могли иметь статики, поскольку требовали экземпляра охватывающего класса. Java 16 ослабляет это ограничение и позволяет статические поля, методы и даже вложенные типы во внутренних классах.