Statyczne składowe w klasach wewnętrznych
Definiuj statyczne składowe w klasach wewnętrznych bez konieczności stosowania statycznych klas zagnieżdżonych.
Porównanie kodu
✕ 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ć.
Dlaczego nowoczesne podejście wygrywa
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
Wsparcie JDK
Statyczne składowe w klasach wewnętrznych
Dostępne
Szeroko dostępne od JDK 16 (marzec 2021)
Jak to działa
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.
Powiązana dokumentacja
Dowód