2013-01-10 18 views
12

Quindi ho cercato su google e SO, non riesco a trovare un esempio o una spiegazione di: qual è lo scopo dei metodi staticfinal in enum?metodi finali statici in enum

quello che ho capito:

  1. Metodi dichiarano static si può accedere come le lingue di funzione/procedurali.
  2. final significa che non è possibile annullare it. Non può cambiare il riferimento Come assylias ha sottolineato nei commenti static non può essere sovrascritto neanche.
  3. enum s non possono essere sottoclasse, ha spiegato here.

Allora, qual è il punto di staticfinal metodi enum s se non verrà mai sovrascritto dal momento che non ci sarà una sottoclasse?

+4

un metodo statico non può essere annullato in ogni caso ... – assylias

+0

@Henry I metodi statici non possono essere sovrascritti. – biziclop

+0

@ assylias Devo aggiungere che al punto due. – wtsang02

risposta

17

Effettuando un metodo statico finale, you prevent it from being hidden (solo i metodi di istanza possono essere sostituiti) da una sottoclasse.

Poiché l'enumerazione non può essere sottoclasse, rendere definitivo un metodo statico è superfluo ma non vietato.

Nota: tecnicamente, ogni costante enum che ha un corpo classe implicitly defines an anonymous class that extends the enum. Ma dal inner classes may not declare static methods, il metodo statico finale non può essere nascosto nel corpo della classe di una tale costante.

+1

+1 In realtà ci sono casi in cui Enum può essere sottoclasse, per esempio in 'enum SomeEnum {VALUE1 {}, VALUE2 {};} 'VALUE1 {} è una classe anonima di tipo' SomeEnum'. Ma poiché non possiamo aggiungere metodi statici a classi interne non statiche (come le classi anonime) usando ' final' con 'static' qui è overkill. – Pshemo

+0

@Pshemo Questo è un buon punto - Ho modificato la mia risposta e aggiunto riferimenti. – assylias

4

È facile capire perché i metodi static abbiano senso, quindi suppongo che la domanda riguardi il modificatore final.

final non serve a nulla qui, tranne forse rendere il codice un po 'più facile da leggere, ma non di molto.

È simile al modo in cui i metodi interface sono spesso scritti come public void foo();, anche se i membri dell'interfaccia sono sempre pubblici comunque.

0

Quando si dichiarano le istanze di una enumerazione è possibile sovrascrivere i metodi dell'enumerazione, essenzialmente le istanze di enum vengono implementate come (o pensate) come sottoclassi. I metodi static non possono essere sovrascritti in ogni caso, ma l'implicazione nell'OP e altre risposte che final è superflua per un enum è falso.

+1

Non è possibile aggiungere un metodo statico alle costanti enum. – assylias

2

In Java I tipi di enum vengono utilizzati per rappresentare un insieme fisso di costanti e renderlo statico finale aiuta la sua inizializzazione solo una volta, copia singola da condividere su tutte le istanze, accedendo alla variabile con il nome della classe e con finale è più simile a read-only