Membri statici nelle classi interne
Definisci membri statici nelle classi interne senza richiedere classi nested statiche.
Confronto Codice
✕ 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();
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Più flessibilità
Le classi interne ora possono avere membri statici quando necessario.
Stato condiviso
Traccia lo stato condiviso tra le istanze di una classe interna.
Libertà di design
Non è necessario promuovere a classe nested statica solo per un campo statico.
Approccio Vecchio
Necessaria la classe nested statica
Approccio Moderno
Membri statici nelle classi interne
Dal JDK
16
Difficoltà
Intermedio
Supporto JDK
Membri statici nelle classi interne
Disponibile
Ampiamente disponibile dal JDK 16 (marzo 2021)
Come funziona
Prima di Java 16, solo le classi nested statiche potevano contenere membri statici. Le classi interne (non statiche) non potevano avere statici perché richiedevano un'istanza di enclosing. Java 16 allenta questa restrizione, permettendo campi statici, metodi e anche tipi nested nelle classi interne.
Documentazione Correlata