Language Średniozaawansowany

Statyczne składowe w klasach wewnętrznych

Definiuj statyczne składowe w klasach wewnętrznych bez konieczności stosowania statycznych klas zagnieżdżonych.

✕ 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();
Widzisz problem z tym kodem? Daj nam znać.
🔓

Większa elastyczność

Klasy wewnętrzne mogą teraz mieć statyczne składowe, gdy jest to potrzebne.

🧩

Współdzielony stan

Śledź współdzielony stan między instancjami klasy wewnętrznej.

📐

Swoboda projektowania

Nie trzeba promować do statycznej klasy zagnieżdżonej tylko dla jednego statycznego pola.

Stare podejście
Wymagana statyczna klasa zagnieżdżona
Nowoczesne podejście
Statyczne składowe w klasach wewnętrznych
Od JDK
16
Poziom trudności
Średniozaawansowany
Statyczne składowe w klasach wewnętrznych
Dostępne

Szeroko dostępne od JDK 16 (marzec 2021)

Przed Javą 16 tylko statyczne klasy zagnieżdżone mogły zawierać statyczne składowe. Wewnętrzne (niestatyczne) klasy nie mogły mieć statycznych elementów, ponieważ wymagały otaczającej instancji. Java 16 łagodzi to ograniczenie, pozwalając na statyczne pola, metody, a nawet zagnieżdżone typy w klasach wewnętrznych.