2013-07-22 22 views
8

Czytałem i wdrażam scenariusz poprzez enum. Pomyślałem, że możemy utworzyć enum bez żadnej instancji. Jakie jest praktyczne zastosowanie takiego Enum? Po drugie Enum może również implementować interfejs , ale oczywiście nie może rozszerzać klasy, ponieważ już rozszerza klasę Enum. Jakie są praktyczne zalety tworzenia Enum bez instancji? BenJaka jest korzyść z tworzenia wyliczenia bez instancji?

+0

O tak. Ale wielu ankieterów zadaje to pytanie. Jeśli go nie ma, dlaczego ludzie z Javy na to zezwalają? Gdzieś może być, jest jakiś pożytek, nie jesteśmy tego świadomi. – benz

+0

Zobacz także: http://stackoverflow.com/a/14900526/829571 – assylias

Odpowiedz

10

enums Zero członkami są rzeczywiście narzędzie klasy idiom używany przez pewien segment społeczności Java (zwłaszcza, Peter Lawrey). Są najbardziej zwięzłym i prawdopodobnie najczystszym sposobem na zagwarantowanie, że klasa nie zostanie zainicjowana lub poddana podklasie.

Naturalnie w takim wyliczeniu nie będziesz miał żadnych metod instancji ; tylko statyczne.

+4

Czy możesz podać przykład miejsca, w którym coś takiego się dzieje? Mogę myśleć o wielu, gdzie używana jest zwykła klasa (np. 'Java.lang.Math'), ale nie sądzę, żebym kiedykolwiek to widział. – arshajii

+3

Ale pojawia się w sekcji "wyliczenia" w javadoc, niekoniecznie tam, gdzie byś go szukał. Ostateczna (dla jasności) klasa + prywatny konstruktor jest IMO standardowym idiomem dla takiego przypadku użycia (chociaż jest to funkcjonalnie równoważny). Zazwyczaj robi się to w JDK (w tym 8). – assylias

+1

@arshajii 'Math' jest o wiele za stary, aby być" enum ". –

0

członkami enum niekoniecznie jest ustalony do końca wszechświata. Można dodać nowych członków bez zerwania porównywalności binarny. Więc mogę sobie wyobrazić, że enum jest tworzony aby wymodelować koncepcję, która nie ma obecnie żadnych instancji, ale może być dodana później ..

Czy możliwe jest również utworzenie enum dla koncepcji, która - jak wiemy - nigdy nie będzie miała żadnych wystąpień? Na przykład enum NegativeNaturalNumber{}? służy w jakimkolwiek celu w programie? Kto wie, nie możemy z całą pewnością powiedzieć:

Powiązane problemy