Enumeration (
Enum ) telah diperkenalkan di
Java 5 dan sejak itu ia menjadi agak popular di kalangan pembangun Java. Ia digunakan secara meluas dalam pelbagai aplikasi Java. Oleh kerana Enum dalam Java jauh lebih serba boleh berbanding dalam C atau C++, ia juga membentangkan banyak kes penggunaan yang menarik, beberapa daripadanya anda lihat dalam artikel
10 Cara Menggunakan Enum dalam Java . Tetapi di sebalik populariti ini, ramai pengaturcara Java masih tidak mengetahui fungsi yang disediakan oleh Enum dan kerumitan penggunaan Enum dalam kod Java.
Ini menjadi jelas daripada beberapa pembaca yang bertanya, sebagai contoh, tentang
keupayaan Enum untuk melaksanakan antara muka dalam Java atau
Mengapa kita tidak boleh membuat instantiate Enums di luar Enum , dengan menyatakan bahawa mereka telah ditanya tentang perkara ini dalam temu bual. Ini memberi inspirasi kepada kami untuk menyusun
senarai soalan lazim dalam Java Enum yang bukan sahaja membantu anda berjaya dalam temu duga, tetapi juga membuka ruang baharu untuk pembelajaran. Seperti yang dinyatakan sebelum ini, selalunya soalan temuduga memaksa anda untuk mengambil topik dengan lebih serius, yang bukan perkara yang buruk, dan memandangkan kuasa dan kegunaan Enum, sudah tiba masanya anda menjadi master enum. Di bawah ialah senarai soalan berdasarkan pelbagai fungsi dan sifat Enum. Anda boleh menggunakannya sebagai bahan persediaan untuk temu duga atau hanya panduan untuk penghitungan. Jika anda baru menggunakan Java, anda akan mempelajari banyak perkara baharu dan berguna tentang Enum.
1) Bolehkah Enum melaksanakan antara muka dalam Java? Ya,
Enum boleh mewarisi antara muka . Oleh kerana jenis Enum adalah serupa dengan
kelas dan
antara muka , ia boleh mewarisi antara muka. Ini memberikan fleksibiliti yang menakjubkan dalam menggunakan Enum sebagai pelaksanaan tersuai dalam beberapa kes.
Berikut ialah contoh yang baik menggunakan Enum dalam kapasiti ini.
2) Bolehkah Enum mewarisi (melanjutkan) kelas? Tidak dia tak boleh! Tidak dijangka, kerana sebelum ini dikatakan bahawa jenis Enum adalah serupa dengan kelas atau antara muka di Jawa. Nah, inilah sebab utama mengapa soalan ini ditanya selepas soalan sebelumnya. Memandangkan
Enum sudah mewarisi daripada kelas abstrak
java.lang.Enum , adalah jelas bahawa kelas lain tidak akan dapat mewarisi kerana Java tidak menyokong warisan berbilang kelas. Dengan mewarisi daripada
java.lang.Enum , semua enum mempunyai kaedah
ordinal() ,
values(), atau
valueOf() .
3) Bagaimana untuk membuat Enum tanpa contoh objek? Adakah ini boleh dilakukan tanpa ralat kompilasi? Ini adalah salah satu
soalan rumit yang digemari oleh penemuduga. Memandangkan Enum dilihat sebagai koleksi bilangan objek tertentu, seperti
hari dalam minggu atau
bulan dalam setahun, mendapatkan
Enum tanpa apa-apa kelihatan mencurigakan. Tetapi ya, anda
boleh mencipta Enum tanpa instance , contohnya dengan mencipta kelas utiliti. Ini adalah satu lagi cara inovatif untuk menggunakan Enum:
public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } }
4) Bolehkah kita mengatasi kaedah toString() untuk Enum? Apa yang berlaku jika kita tidak mentakrifkan semula? Sudah tentu anda boleh mengatasi kaedah
toString() Enum , kerana anda boleh mengatasi mana-mana kelas yang mewarisi
java.lang.Object dan mempunyai kaedah
toString() yang tersedia, dan walaupun anda tidak melakukannya, anda tidak akan kehilangan apa-apa kerana abstrak asas kelas Enum akan melakukan ini untuk anda, dan akan mengembalikan nama, iaitu nama contoh Enum. Berikut ialah kod untuk kaedah
toString() daripada kelas Enum:
public String toString() { return name; }
nama ditentukan apabila pengkompil memperuntukkan kod untuk mencipta enum sebagai tindak balas kepada mencipta contoh dalam kelas Enum itu sendiri, serta mencipta ordinal dalam pembina daripada kelas
java.lang.Enum :
protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; }
Ini adalah
satu-satunya pembina untuk mencipta enum , yang dipanggil oleh pengkompil sebagai tindak balas kepada pengisytiharan Enum dalam atur cara.
5) Bolehkah kita membuat instantiat Enum di luar Enum? Kenapa tidak? Anda
tidak boleh membuat instantiat Enum di luar sempadan Enum kerana Enum tidak mempunyai
awampembina, dan pengkompil tidak akan membenarkan anda memperkenalkan mana-mana pembina sedemikian. Oleh kerana pengkompil menjana kebanyakan kod sebagai tindak balas kepada pengisytiharan jenis Enum, ia tidak membenarkan pembina
awam dalam Enum, memaksa kejadian Enum diisytiharkan secara dalaman.
6) Bolehkah kita menentukan pembina di dalam Enum? Soalan ini sering mengikuti soalan sebelumnya. Ya, anda boleh, tetapi ingat bahawa ini hanya boleh dilakukan dengan pembina
peribadi atau
pakej-peribadi . Pembina dengan
orang awam dan
dilindungi tidak dibenarkan di Enum. Di sini anda boleh melihat
contoh .
7) Apakah perbezaan antara membandingkan Enum menggunakan kaedah == atau equals()? Ini adalah isu yang sangat luas dan rumit yang dibincangkan secara terperinci
di sini .
8) Apakah yang dilakukan oleh kaedah ordinal() dalam Enum? Kaedah
ordinal() mengembalikan susunan kejadian Enum ditetapkan dalam Enum. Contohnya, dalam
DayOfWeek Enum, anda boleh menentukan hari mengikut urutan:
public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; }
dan jika kami memanggil kaedah
DayOfWeek.MONDAY.ordinal() , ia akan mengembalikan 0 - yang bermaksud contoh pertama. Kaedah ini sangat berguna untuk menyediakan pesanan mengikut keadaan sebenar perkara: iaitu, menunjukkan bahawa
SELASA (Selasa) datang selepas
ISNIN (Isnin), dan sebelum
RABU (Rabu). Begitu juga, anda boleh menggunakan penghitungan untuk mewakili bulan dalam setahun, di mana Februari datang selepas Januari tetapi datang sebelum Mac. Semua penghitungan tersuai mewarisi kaedah ini daripada kelas abstrak
java.lang.Enum , dan ia ditetapkan oleh pengkompil dengan memanggil pembina
yang dilindungi pada
java.lang.Enum , yang mengambil nama dan ordinal.
9) Adakah mungkin untuk menggunakan Enum dengan TreeSet atau TreeMap di Jawa? Ini adalah soalan Enum yang sangat menarik, dan soalan yang orang suka tanya untuk menguji kedalaman pengetahuan mereka. Sehingga anda melihat kod
java.lang.Enum , anda mungkin tidak akan tahu bahawa
Enum mewarisi antara muka Sebanding , yang merupakan keperluan utama untuk digunakan dalam koleksi tersusun seperti
TreeSet dan
TreeMap .
Memandangkan Enum mewarisi antara muka Sebanding secara lalai , ia boleh digunakan dengan
TreeSet dan
TreeMap .
10) Apakah perbezaan antara ordinal() dan compareTo() dalam Enum? Ini mengikuti terus daripada soalan sebelumnya: sebenarnya,
compareTo() mensimulasikan susunan yang disediakan oleh kaedah tersebut
ordinal() , yang merupakan susunan semula jadi Enum. Ringkasnya, Enum mengehadkan perbandingan dalam susunan di mana ia diisytiharkan. Selain itu, perlu diingat bahawa pemalar ini hanya boleh dibandingkan dengan pemalar lain daripada jenis yang sama - membandingkan pelbagai jenis pemalar boleh membawa kepada ralat pengkompil.
11) Adakah mungkin untuk menggunakan Enum dalam kes suis? Ya awak boleh. Lebih-lebih lagi, ini adalah salah satu faedah utama menggunakan Enum. Memandangkan kejadian Enum dikompilasi kepada pemalar sementara, anda boleh menyuntiknya dengan selamat di dalam
kes dan menukar . Berikut ialah contoh kod dengan hari dalam minggu:
public void developerState(DayOfWeek today){ switch(today){ case MONDAY: System.out.println("Hmmmmmmmm"); break; case TUESDAY: System.out.println("Hmmmm"); break; case FRIDAY : System.out.println("Yeahhhhhh"); break; } }
Enum dan Switch saling melengkapi dengan baik, terutamanya jika Enum mengandungi sebilangan kecil pemalar yang stabil, contohnya, tujuh hari dalam seminggu, 12 bulan dalam setahun, dsb. Lihatlah contoh lain menggunakan
swith case dengan Enum .
12) Bagaimana untuk mengulangi keseluruhan contoh Enum? Jika anda telah membuka
java.lang.Enum , anda tahu bahawa kaedah
values() mengembalikan tatasusunan semua pemalar Enum. Oleh kerana setiap enum mewarisi
java.lang.Enum , mereka mempunyai kaedah
values() . Menggunakannya, anda boleh melelaran melalui semua pemalar penghitungan jenis tertentu. Lihat
contoh perkara ini melalui gelung
foreach dan kaedah
values() .
13) Apakah kebaikan dan keburukan menggunakan Enum sebagai singleton? Enum menyediakan
pintasan pantas untuk melaksanakan corak tunggal, dan kerana ia juga diliputi dalam buku Java Berkesan, ia adalah pilihan yang popular. Pada pandangan pertama, singleton Enum adalah menjanjikan dan agak mudah, seperti ia mengawal instantiasi, boleh bersiri dengan selamat, dan yang paling penting, adalah mudah untuk mencipta singleton selamat benang menggunakan Enum. Anda tidak perlu lagi bimbang tentang menyemak semula turun naik pembolehubah. Baca lebih lanjut mengenai kebaikan dan keburukan menggunakan pendekatan ini
di sini .
14) Apakah faedah menggunakan Enum dan bukannya int enumeration dan String enumeration patterns? Jika anda telah memprogramkan selama lebih daripada 5 tahun dan masih dalam JDK 1.3 atau 1.4, anda akan terbiasa dengan
corak penghitungan String dan int , yang menggunakan awalan pemalar
akhir statik awam untuk mewakili koleksi tetap yang terkenal. bilangan perkara, seperti
Hari Dalam Minggu . Terdapat banyak masalah di sini: anda tidak mempunyai kebebasan jenis Enum, kerana pembolehubah
String yang bertanggungjawab untuk hari dalam seminggu boleh mengambil sebarang nilai sewenang-wenangnya. Begitu juga,
int yang boleh dikira boleh mengambil sebarang nilai, dan pengkompil akan dengan senang hati menelannya. Dan menggunakan
Enum , anda mendapat jenis keselamatan yang diperiksa oleh pengkompil untuk anda. Terdapat beberapa pemikiran menarik tentang topik ini dalam Java Berkesan, yang disyorkan untuk dibaca untuk semua pembangun Java.
15) Bagaimana untuk menukar String ke Enum? Ini adalah soalan harian yang timbul kerana populariti penggunaan
String dan
Enum dalam pembangunan aplikasi Java. Cara terbaik untuk menukar
Enum kepada String adalah dengan menentukan kaedah kilang pada Enum itu sendiri yang akan mengambil argumen
String dan mengembalikannya sebagai
Enum . Anda juga mungkin ingin mengabaikan kes. Berikut ialah beberapa
contoh menukar rentetan kepada penghitungan. Ini membawa kami ke penghujung senarai 15 soalan (
dan jawapan ) kami tentang Enum.
Tetapi ingat:
membaca tidak cukup untuk belajar, ia hanya langkah pertama . Untuk mendapat manfaat daripada enum, cuba cari di mana anda boleh menggunakan Enum dalam projek anda - ini akan memberi anda pengalaman dunia sebenar, dan dengan pengalaman ini anda akan belajar lebih daripada daripada contoh, kerana anda akan menghadapi lebih banyak masalah yang boleh anda tangani dalam lebih cara yang kompleks dan terperinci.keperluan.
Soalan-soalan mengenai Enum ini patut diberi perhatian untuk menguji pengetahuan anda, terutamanya jika anda tergesa-gesa untuk temu duga dan tiada masa untuk menyelami alam semesta Enum secara terperinci.
GO TO FULL VERSION