2013-01-10 20 views
12

Tak więc rozejrzałem się po Google i SO, nie mogę znaleźć przykładu ani wyjaśnienia: Jaki jest cel metod staticfinal w enum?statyczne metody końcowe w enum

Co rozumiem:

  1. Metody zadeklarować static można uzyskać jak funkcja/języków proceduralnych.
  2. final oznacza, że ​​nie można zastąpić go. Nie można zmienić odwołania. Asyliów wskazanych w komentarzach static również nie można przesłonić.
  3. enum s nie mogą być poddane podklasę, wyjaśnił here.

Więc jaki jest sens staticfinal metod w enum s jeśli to nie zostanie nadpisane ponieważ nie będzie podklasą?

+4

metoda statyczna nie może być w każdym przypadku nadpisana ... – assylias

+0

@ Henry Metody statyczne również nie mogą być przesłonięte. – biziclop

+0

@ assylias Powinienem dodać to w punkcie drugim. – wtsang02

Odpowiedz

17

Wykonanie statycznej metody ostatecznej, you prevent it from being hidden (tylko metody instancji można przesłonić) przez podklasę.

Ponieważ enum nie może być podklasowane, wykonanie statycznej metody jest zbędne, ale nie zabronione.

Uwaga: technicznie, każda stała wyliczeniowa, która ma bryłę klasy implicitly defines an anonymous class that extends the enum. Ale od inner classes may not declare static methods, statyczna metoda końcowa nie mogła być ukryta w ciele takiej stałej klasy.

+1

+1 Rzeczywiście zdarzają się przypadki, w których Enum może być podklasy, na przykład w 'enum SomeEnum {VALUE1 {}, VALUE2 {};}' VALUE1 {} jest anonimową klasą typu 'SomeEnum', ale ponieważ nie możemy dodawać metod statycznych do niestatycznych klas wewnętrznych (takich jak anonimowe klasy) używając' final' z 'static' tutaj jest przesadą. – Pshemo

+0

@Pshemo To dobra uwaga - zredagowałem moją odpowiedź i dodałem odniesienia. – assylias

4

Łatwo zrozumieć, dlaczego metody static mają sens, więc domyślam się, że pytanie dotyczy modyfikatora final.

final nie służy tutaj żadnemu celowi, może poza tym, że kod jest nieco łatwiejszy do odczytania, ale nie za dużo.

Metoda podobna do metody jest często zapisywana jako public void foo();, mimo że członkowie interfejsu są zawsze publicznie dostępni.

0

Po zadeklarowaniu wystąpień wyliczenia można zastąpić metody wyliczeniowe, w zasadzie instancje wyliczeniowe są implementowane jako (lub myśli) jako podklasy. static metody nie mogą być w każdym przypadku nadpisane, ale implikacja w OP i innych odpowiedziach, które final jest zbędna dla enum, jest fałszywa.

+1

Nie można dodać statycznej metody do wyliczania stałych. – assylias

2

W języku Java typy Enum służą do reprezentowania stałego zestawu stałych, a sprawianie, że jest statyczny, pomaga w inicjalizacji tylko raz, pojedyncza kopia jest współużytkowana we wszystkich instancjach, uzyskując dostęp do zmiennej z nazwą klasy, a z końcem jest bardziej zbliżona do tylko do odczytu

Powiązane problemy