JavaRush /Java Blogu /Random-AZ /Java-da Enum ilə bağlı 15 Tərtibatçı Müsahibə Sualı (Cava...
Treefeed
Səviyyə

Java-da Enum ilə bağlı 15 Tərtibatçı Müsahibə Sualı (Cavablarla!)

Qrupda dərc edilmişdir
Enumeration ( Enum ) Java 5 -də təqdim edildi və o vaxtdan bəri Java tərtibatçıları arasında olduqca populyarlaşdı. Müxtəlif Java proqramlarında geniş istifadə olunur. Java-da Enum C və ya C++ ilə müqayisədə daha çox yönlü olduğundan, o, həmçinin bir çox maraqlı istifadə hallarını təqdim edir, onlardan bir neçəsini Java-da Enumdan istifadə etməyin 10 yolları məqaləsində gördüyünüz . Lakin bu populyarlığa baxmayaraq, bir çox Java proqramçıları hələ də Enum tərəfindən təmin edilən funksionallıqdan və Java kodunda Enum-dan istifadənin incəliklərindən xəbərsizdirlər. Bu, məsələn, Enum-un Java-da interfeys tətbiq etmək qabiliyyəti və ya Enum-u niyə Enum-dan kənarda qura bilməməyimiz barədə soruşan bir neçə oxucudan aydın oldu və müsahibədə onlardan bu barədə soruşulduqlarını qeyd etdi. Bu, bizi Java Enum-da tez-tez verilən sualların siyahısını tərtib etməyə ruhlandırdı ki, bunlar təkcə müsahibələrdə uğur qazanmağınıza kömək etmir, həm də öyrənmə üçün yeni imkanlar açır. Daha əvvəl qeyd edildiyi kimi, tez-tez müsahibə sualları sizi mövzuya daha ciddi yanaşmağa məcbur edir, bu pis bir şey deyil və Enumun gücünü və faydalılığını nəzərə alaraq, enum ustası olmağın vaxtı gəldi. Aşağıda Enumun müxtəlif funksionallığı və xüsusiyyətlərinə əsaslanan sualların siyahısı verilmişdir. Siz ondan müsahibə üçün hazırlıq materialı və ya sadəcə siyahıyaalma üçün bələdçi kimi istifadə edə bilərsiniz. Əgər Java-da yenisinizsə, Enum haqqında çoxlu yeni və faydalı şeylər öyrənəcəksiniz. 1) Enum Java-da interfeys tətbiq edə bilərmi? Bəli, Enum interfeysləri miras ala bilər . Enum növü sinfəinterfeysə bənzədiyi üçün o, interfeysi miras ala bilər. Bu, bəzi hallarda Enum-dan xüsusi bir tətbiq kimi istifadə etməkdə inanılmaz rahatlıq verir. Budur, Enum-u bu keyfiyyətdə istifadə etməyin yaxşı bir nümunəsi. 2) Enum sinfi miras ala (genişləndirə bilər)? Yox, bacarmaz! Gözlənilməz, çünki əvvəllər Enum tipinin Java-dakı sinif və ya interfeysə bənzədiyi deyilirdi. Bu sualın əvvəlki sualdan dərhal sonra verilməsinin əsas səbəbi budur. Enum artıq java.lang.Enum mücərrəd sinfindən miras aldığından , aydındır ki, Java çox sinif irsiyyətini dəstəkləmədiyi üçün başqa bir sinif miras ala bilməyəcək. java.lang.Enum- dan miras alaraq , bütün enumlar ordinal() , values() və ya valueOf() metodlarına malikdir . 3) Obyekt nümunələri olmadan Enum necə yaradılır? Bu kompilyasiya xətası olmadan mümkündürmü? Bu, müsahibə verənlərin sevdiyi çətin suallardan biridir . Enum, həftənin günləri və ya ilin ayları kimi müəyyən sayda obyektlərin toplusu kimi göründüyü üçün, heç bir şey olmadan Enum əldə etmək şübhəli görünür. Ancaq bəli, nümunələr olmadan bir Enum yarada bilərsiniz , məsələn, bir köməkçi sinif yaratmaqla. Bu, Enum-dan istifadə etməyin başqa bir innovativ yoludur: 4) Biz Enum üçün toString() metodunu ləğv edə bilərikmi? Yenidən təyin etməsək nə olar? Əlbəttə ki, siz Enum-un toString() metodunu ləğv edə bilərsiniz, çünki siz java.lang.Object-i miras alan və mövcud toString() metodu olan istənilən sinfi ləğv edə bilərsiniz və belə etməsəniz belə, heç nə itirməyəcəksiniz, çünki mücərrəd Enum sinfinin bazası bunu sizin üçün edəcək və Enum instansiyasının adı olan adı qaytaracaq. Budur, Enum sinfindən toString() metodu üçün kod : ad, tərtibçi Enum sinfinin özündə nümunə yaratmağa cavab olaraq enum yaratmaq üçün kod ayırdıqda, həmçinin konstruktorda ordinal yaratdıqda təyin olunur. java.lang.Enum sinfi : Bu, proqramda Enum elanına cavab olaraq kompilyator tərəfindən çağırılan enum yaratmaq üçün yeganə konstruktordur . 5) Enum-dan kənarda bir Enum yarada bilərikmi? Niyə də yox? Siz Enumun hüdudlarından kənarda bir Enum yarada bilməzsiniz, çünki Enumda ictimai yoxdur public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } public String toString() { return name; } protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } konstruktor və kompilyator hər hansı belə konstruktoru təqdim etməyə imkan verməyəcək. Kompilyator Enum tipli bəyannaməyə cavab olaraq əksər kodlar yaratdığından, Enumlar daxilində ictimai konstruktorlara icazə vermir və Enum instansiyalarını daxili elan etməyə məcbur edir. 6) Enum daxilində konstruktor təyin edə bilərikmi? Bu sual tez-tez əvvəlki sualdan sonra verilir. Bəli, edə bilərsiniz, lakin unutmayın ki, bu, yalnız özəl və ya paketli özəl konstruktorlarla mümkündür . Enumda ictimaiqorunan konstruktorlara icazə verilmir. Burada bir nümunə görə bilərsiniz. 7) == və ya equals() metodundan istifadə edərək Enum-u müqayisə etmək arasında fərq nədir? Bu, burada ətraflı şəkildə əhatə olunan çox geniş və çətin məsələdir . 8) Enum-da ordinal() metodu nə edir? ordinal() metodu Enum instansiyalarının Enum daxilində təyin olunduğu sıranı qaytarır. Məsələn, DayOfWeek Enum-da siz günləri ardıcıllıqla təyin edə bilərsiniz: və əgər DayOfWeek.MONDAY.ordinal() public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } metodunu çağırsaq , o, 0-ı qaytaracaq - bu, birinci instansiya deməkdir. Bu üsul işin faktiki vəziyyətinə uyğun nizamı təmin etmək üçün çox faydalıdır: yəni ÇƏRŞƏNBƏNİNİN (Çərşənbə axşamı) BAZAR EDƏNƏNİNDƏN (Bazar ertəsi) sonra və ÇƏRŞƏNBƏDƏN (Çərşənbə) əvvəl gəldiyini göstərmək üçün . Eynilə, ilin aylarını təmsil etmək üçün siyahıdan istifadə edə bilərsiniz, burada fevral yanvardan sonra gəlir, lakin martdan əvvəl gəlir. Bütün fərdi siyahılar bu metodu java.lang.Enum abstrakt sinifindən miras alır və onlar ad və sıra qəbul edən java.lang.Enum -da qorunan konstruktoru çağırmaqla kompilyator tərəfindən təyin edilir . 9) Java-da TreeSet və ya TreeMap ilə Enum-dan istifadə etmək mümkündürmü? Bu, həqiqətən maraqlı bir Enum sualıdır və insanların biliklərinin dərinliyini yoxlamaq üçün soruşmağı xoşlayırlar. Java.lang.Enum koduna baxana qədər yəqin ki, Enumun TreeSetTreeMap kimi sifarişli kolleksiyalarda istifadə üçün əsas tələb olan Müqayisəli interfeysi miras aldığını bilməyəcəksiniz . Enum defolt olaraq Müqayisə edilə bilən interfeysi miras aldığı üçün ondan TreeSetTreeMap ilə istifadə oluna bilər . 10) Enum-da ordinal() və compareTo() arasındakı fərq nədir? Bu, birbaşa əvvəlki sualdan irəli gəlir: əslində, compareTo() metodun təqdim etdiyi sıranı simulyasiya edir ordinal() , Enumun təbii sırasıdır. Qısacası, Enum müqayisələri elan olunduğu ardıcıllıqla məhdudlaşdırır. Həmçinin, yadda saxlamaq lazımdır ki, bu sabitlər yalnız eyni tipli digər sabitlərlə müqayisə oluna bilər - müxtəlif növ sabitlərin müqayisəsi kompilyator xətasına səbəb ola bilər. 11) Enum-dan keçid qutusunda istifadə etmək mümkündürmü? Bəli sən bacararsan. Üstəlik, bu, Enum istifadə etməyin əsas üstünlüklərindən biridir. Enum nümunələri müvəqqəti sabitə tərtib edildiyi üçün siz onları təhlükəsiz şəkildə case və keçidin içərisinə yeridə bilərsiniz . Budur, həftənin günləri ilə kod nümunəsi: 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 və Switch bir-birini yaxşı tamamlayır, xüsusən də Enum az sayda sabit sabitləri ehtiva edirsə, məsələn, həftənin yeddi günü, ilin 12 ayı və s. Enum ilə swith case istifadəsinin digər nümunələri . 12) Bütün Enum instansiyasını necə təkrarlamaq olar? Əgər java.lang.Enum açmısınızsa , siz bilirsiniz ki, values() metodu bütün Enum sabitlərinin massivini qaytarır. Hər bir nömrə java.lang.Enum-u miras qoyduğu üçün onların values() metodu var . Bundan istifadə edərək, müəyyən bir növ siyahının bütün sabitləri ilə təkrarlaya bilərsiniz. Bunun foreach döngəsi və values() metodu ilə keçdiyi nümunələrə baxın . 13) Enum-u singleton kimi istifadə etməyin müsbət və mənfi cəhətləri hansılardır? Enum təkton nümunəsini həyata keçirmək üçün sürətli qısa yol təqdim edir və hətta Effektiv Java kitabında da əhatə olunduğu üçün bu, məşhur seçimdir. İlk baxışdan, Enum singletonu perspektivlidir və kifayət qədər rahatdır, məsələn, instantasiyaya nəzarət edir, etibarlı şəkildə seriallaşdırıla bilir və hər şeydən əvvəl, Enum istifadə edərək iplik təhlükəsiz singleton yaratmaq asandır. Dəyişənlərin dəyişkənliyini iki dəfə yoxlamaq üçün artıq narahat olmaq lazım deyil. Bu yanaşmanın istifadəsinin müsbət və mənfi tərəfləri haqqında daha çox oxuyun . 14) İnt enumeration və String enumeration modelləri əvəzinə Enum istifadə etməyin faydası nədir? Əgər siz 5 ildən artıq proqramlaşdırma ilə məşğul olmusunuzsa və hələ də JDK 1.3 və ya 1.4-dəsinizsə, siz tanınmış sabitlər toplusunu təmsil etmək üçün ictimai statik yekun sabit prefiksdən istifadə edən String və int nömrələmə nümunələri ilə tanış olacaqsınız. Həftənin günləri kimi bir çox şey . Burada çoxlu problemlər var: sizin Enum tipindən müstəqillik yoxdur, çünki həftənin gününə cavabdeh olan String dəyişəni istənilən ixtiyari qiymət ala bilər. Eynilə, sadalanan int istənilən dəyəri qəbul edə bilər və tərtibçi onu məmnuniyyətlə udacaq. Və istifadə Enum , siz kompilyatorun sizin üçün yoxladığı tip təhlükəsizliyini əldə edirsiniz. Bütün Java tərtibatçılarına oxumaq tövsiyə olunan Effektiv Java-da bu mövzuda maraqlı fikirlər var. 15) Stringi Enum-a necə çevirmək olar? Bu , Java proqramlarının hazırlanmasında StringEnum istifadəsinin populyarlığına görə gündəmə gələn gündəlik sualdır . Enum-u Stringə çevirməyin ən yaxşı yolu , Enum-un özündə String arqumentlərini götürəcək və onu Enum kimi qaytaracaq zavod metodunu təyin etməkdir . Siz həmçinin hadisəyə məhəl qoymamaq istəyə bilərsiniz. Burada sətirlərin siyahıya çevrilməsinə dair bəzi nümunələr verilmişdir. Bu, bizi Enum haqqında 15 sualdan ( və cavablardan ) ibarət siyahımızın sonuna gətirir . Ancaq unutmayın: öyrənmək üçün oxumaq kifayət deyil, bu yalnız ilk addımdır . Enumlardan faydalanmaq üçün layihənizdə Enum-dan harada istifadə edə biləcəyinizi tapmağa çalışın - bu sizə real dünya təcrübəsi verəcək və bu təcrübə ilə siz nümunələrdən daha çox şey öyrənəcəksiniz, çünki daha çox həll edə biləcəyiniz daha çox problemlə qarşılaşacaqsınız. mürəkkəb və müfəssəl yollar.tələblər. Enum haqqında bu suallara , xüsusən də müsahibəyə tələsirsinizsə və Enum kainatında təfərrüatlı bir şəkildə dalmağa vaxtınız yoxdursa, biliklərinizi yoxlamaq üçün diqqət yetirməyə dəyər.
Şərhlər
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION