ENUMERATORI
I tipi ENUM possono avere costruttori e variabili
I costruttori di un ENUM devono essere o private oppure con la visibilità di default (senza modificatore esplicito)
Un enumeratore può implementare un’interfaccia ma NON può estendere una classe.
Ogni costante di un enumeratore è un oggetto di quel tipo enumeratore.
Un enumeratore estende automaticamente Enum.
Un Enum può avere solo costruttiori private
Un Enum NON può avere costruttori public
Un Enum può avere campi e metodi public
Il confronto con equals() tra I valori di 2 enumeratori diversi restituisce false
Per confrontare i valori numerici di 2 enumeratori diversi si deve utilizzare l’operatore == dopo aver invocato su di esssi il metodo ordinal().
In questo caso, se i valori degli enumeratori occupano la stesso posizione viene restituito true
I valori di un enumerator si possono stampare in 2 modi:
- System.out.println(Seeds.Hearts.ordinal()) -> stampa il valore numerico
- System.out.println(Seeds.Hearts) -> stampa la stringa “Hearts”
Se un enum è dichiarato all’interno di una classe, per indicare un’istanza dell’enum devo utilizzare il nome della classe.
Esempio:
class Phone {
public static void main(String[] args) {
Phone.State = Phone.State.ONCALL
}
public enum State { ONCALL, IDLE, WAITING }
}
Per iterare sui valori di un enum si deve utilizzare il metodo values() nel enhanced loop.
NESTED CLASS
Una nested class statica NON può vedere le variabili di istanza della sua classe contenitore in modo diretto.
I metodi definiti nelle inner class fanno lo shadowing dei metodi a parità di nome con quelli della classe contenitore. Lo shadowing viene fatto sul nome e non sulla sua intere signature.
Una inner class può accedere ai membri privati della classe outer. Allo stesso modo, anche la classe outer può accedere ai membri privati della inner class.
- Una classe esterna può accedere ai membri private di una nested class solo dichiarando un oggetto della nested class stessa.