JavaRush /Blog Java /Random-MS /15 Soalan Temuduga Pembangun Berkenaan Enum di Jawa (deng...
Treefeed
Tahap

15 Soalan Temuduga Pembangun Berkenaan Enum di Jawa (dengan Jawapan!)

Diterbitkan dalam kumpulan
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.
Komen
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION