JavaRush /Blog Jawa /Random-JV /Enumerasi ing Jawa (Jawa enum)
articles
tingkat

Enumerasi ing Jawa (Jawa enum)

Diterbitake ing grup
Nalika pemrograman, kita asring nemoni kabutuhan kanggo mbatesi set nilai sing bener kanggo jinis data tartamtu. Dadi, contone, dina minggu bisa duwe 7 nilai sing beda-beda, sasi taun bisa duwe 12, lan musim bisa duwe 4. Kanggo ngatasi masalah kasebut, akeh basa pemrograman sing diketik kanthi statis nyedhiyakake jinis data khusus - enumerasi ( enum). Enumerasi ora langsung katon ing Jawa. Konstruksi basa khusus enumdiwiwiti kanthi versi 1.5. Nganti titik iki, programer wis nggunakake cara liya kanggo ngleksanakake enumerasi. Enumerasi ing basa Jawa (java enum) - 1

mbangun enum

Ayo dadi miwiti karo conto. Ayo diterangake enumjinis data kanggo nyimpen mangsa nggunakake:
enum Season { WINTER, SPRING, SUMMER, AUTUMN }
Inggih, conto prasaja saka nggunakake:
Season season = Season.SPRING;
if (season == Season.SPRING) season = Season.SUMMER;
System.out.println(season);
Akibaté, SUMMER bakal dicithak ing konsol . Aku sing conto iku ketok lan ora perlu panjelasan.

Enum minangka kelas

Kanthi ngumumake enum, kita nggawe kelas sing asale saka java.lang.Enum. Conventionally, construction enum Season { ... }padha karo class Season extends java.lang.Enum { ... }. Lan sanajan kompiler ora ngidini kita menehi warisan kanthi jelas saka java.lang.Enumkita, nanging isih gampang kanggo verifikasi manawa enumdiwarisake nggunakake reflection:
System.out.println(Season.class.getSuperclass());
Ing ngisor iki bakal ditampilake ing console:
class java.lang.Enum
Warisan nyata ditindakake kanthi otomatis dening kompiler Jawa. Sabanjure, ayo setuju nelpon kelas sing digawe dening compiler kanggo ngleksanakake enumerasi -class enum, lan kemungkinan nilai saka jinis enumerated minangka enumunsur -a.

Anggota Enum minangka conto enumsaka -class sing bisa diakses kanthi statis

Elemen enum Season (WINTER, SPRING и т.д.)minangka conto sing bisa diakses kanthi statis enumsaka -class Season. Kasedhiyan statis ngidini kita nindakake perbandingan nggunakake operator pembanding referensi ==. Tuladha:
Season season = Season.SUMMER;
if (season == Season.AUTUMN) season = Season.WINTER;

Jeneng lan nomer seri saka unsur enum

Kaya kasebut sadurunge, sembarang enum-class inherits java.lang.Enum, kang ngandhut sawetara cara migunani kanggo kabeh enumeration. Tuladha:
Season season = Season.WINTER;
System.out.println("season.name()=" + season.name() + " season.toString()=" + season.toString() + " season.ordinal()=" + season.ordinal());
Output bakal:
season.name()=WINTER season.toString()=WINTER season.ordinal()=0
Cara name(), toString()lan ditampilake ing kene ordinal(). Semantik metode kasebut jelas. Perlu dicathet menawa metode kasebut enumdiwarisake saka kelas java.lang.Enum. Njupuk unsur enumkanthi perwakilan senar saka jenenge Cukup asring tugas muncul kanggo njupuk unsur enumkanthi perwakilan senar. Kanggo tujuan kasebut, ing saben enumkelas, kompiler kanthi otomatis nggawe cara statis khusus: public static EnumClass valueOf(String name), sing ngasilake unsur enumerasi EnumClasskanthi jeneng sing padha karo name. Tuladha panganggone:
String name = "WINTER";
Season season = Season.valueOf(name);
Minangka asil saka eksekusi kode, variabel mangsa bakal padha karo Season.WINTER. Elinga yen unsur kasebut ora ditemokake, IllegalArgumentException bakal dibuwang , lan yen namepadha null, NullPointerException bakal dibuwang . Miturut cara, iki asring dilalekake. Kanggo sawetara alasan, akeh sing yakin yen fungsi njupuk siji argumentasi lan ing kondisi tartamtu mbuwang IllegalArgumentException , banjur nalika ngliwati ana , IllegalArgumentExceptionnull mesthi bakal dibuwang uga . Nanging iku ing jejere titik. Ayo diterusake. Entuk kabeh unsur enumerasi Kadhangkala sampeyan kudu entuk dhaptar kabeh unsur kelas-kelas nalika mbukak. Kanggo tujuan kasebut, kompiler nggawe metode ing saben kelas . Tuladha panganggone: enumenumpublic static EnumClass[] values()
System.out.println(Arrays.toString(Season.values()));
Kita entuk output ing ngisor iki:
[WINTER, SPRING, SUMMER, AUTUMN]
Elinga yen metode valueOf()utawa metode ora values()ditetepake ing kelas java.lang.Enum. Nanging, padha otomatis ditambahake dening compiler nalika enum-class nyawiji. Nambahake cara dhewe kanggo enum-class Sampeyan duwe kesempatan kanggo nambah cara dhewe loro kanggo enum-class lan unsur sawijining: Enumerasi ing basa Jawa (java enum) - 2Padha, nanging karo polymorphism: Enumerasi ing basa Jawa (java enum) - 3Conto pungkasan nduduhake nggunakake pusaka ing enum. Liyane babagan iki mengko. Warisanenum ing Jawa enumngidini sampeyan ngleksanakake hirarki kelas, obyek sing digawe ing siji conto lan bisa diakses kanthi statis. Ing kasus iki, unsur enumbisa ngemot konstruktor dhewe. Ayo menehi conto: Enumerasi ing basa Jawa (java enum) - 4Ing kene kita ngumumake enumerasi Typekanthi telung unsur INT, INTEGERlan STRING. Compiler bakal nggawe kelas lan obyek ing ngisor iki:
  • Type- kelas asalé sakajava.lang.Enum
  • INT- obyek saka kelas 1 asalé sakaType
  • INTEGER- obyek saka kelas 2 asalé sakaType
  • STRING- obyek saka kelas 3 asalé sakaType
Telung kelas turunan bakal digawe kanthi metode polimorfik Object parse(String)lan konstruktor Type(..., boolean). Ing wektu sing padha, obyek saka kelas INT, INTEGERlan STRINGana ing salinan siji lan statis diakses. Sampeyan bisa verifikasi iki:
System.out.println(Type.class);
System.out.println(Type.INT.getClass() + " " + Type.INT.getClass().getSuperclass());
System.out.println(Type.INTEGER.getClass() + " " + Type.INTEGER.getClass().getSuperclass());
System.out.println(Type.STRING.getClass()  + " " + Type.STRING.getClass().getSuperclass());
Kita entuk output ing ngisor iki:
class Type
class Type$1 class Type
class Type$2 class Type
class Type$3 class Type
Bisa dideleng manawa kompiler nggawe kelas Typelan 3 nestedkelas sing asale saka Type.

Decompiled enum-kelas karo warisan

Kanggo konfirmasi ing ndhuwur, kita uga nampilake asil dekompilasi enumerasi Typesaka conto ing ndhuwur: Enumerasi ing Jawa (java enum) - 5

Enumerasi lan polimorfisme parametrik

Sing maca bisa uga mikir: " Napa enumerasi Tipe ing ndhuwur ora nggunakake generik? " Kasunyatane yen ing Jawa ora nggunakake generik enum. Dadi conto ing ngisor iki ora bakal dikompilasi:
enum Type<T> {}

Sinau luwih

Kanggo mangerteni sing luwih jero babagan cara enumerasi ing Jawa, aku nyaranake sampeyan familiarize dhewe karo kode sumber kelas java.lang.Enum, lan uga nggunakake decompiler Jad kanggo sinau kode sing digawe. Menapa malih, sinau kode sumber perpustakaan Jawa pancen perlu kanggo mangerteni carane akeh mekanisme ing Jawa dianggo lan migunani minangka referensi kanggo desain obyek-oriented. Pranala menyang sumber asli: http://alexander.lds.lg.ua/
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION