JavaRush /Java Blog /Random-IT /15 domande di intervista per sviluppatori riguardanti Enu...
Treefeed
Livello 21

15 domande di intervista per sviluppatori riguardanti Enum in Java (con risposte!)

Pubblicato nel gruppo Random-IT
L'enumerazione ( Enum ) è stata introdotta in Java 5 e da allora è diventata molto popolare tra gli sviluppatori Java. È ampiamente utilizzato in varie applicazioni Java. Poiché Enum in Java è molto più versatile che in C o C++, presenta anche molti casi d'uso interessanti, un paio dei quali hai visto nell'articolo 10 modi per utilizzare Enum in Java . Ma nonostante questa popolarità, molti programmatori Java non sono ancora consapevoli delle funzionalità fornite da Enum e delle complessità dell'utilizzo di Enum nel codice Java. Ciò è emerso chiaramente da diversi lettori che hanno chiesto, ad esempio, se Enum può implementare un'interfaccia in Java o Perché non possiamo istanziare Enum al di fuori di Enum , notando che questo è stato chiesto loro in un'intervista. Questo ci ha ispirato a compilare un elenco di domande frequenti in Java Enum che non solo ti aiutano ad avere successo nelle interviste, ma aprono anche nuove strade per l'apprendimento. Come affermato in precedenza, spesso le domande delle interviste ti costringono a prendere l'argomento più seriamente, il che non è una brutta cosa, e data la potenza e l'utilità di Enum, è ora che diventi un maestro dell'enumerazione. Di seguito è riportato un elenco di domande basate su varie funzionalità e proprietà di Enum. Puoi usarlo come materiale preparatorio per un colloquio o semplicemente come guida all'enumerazione. Se sei nuovo a Java, imparerai molte cose nuove e utili su Enum. 1) Enum può implementare un'interfaccia in Java? Sì, Enum può ereditare le interfacce . Poiché il tipo Enum è simile a una classe e a un'interfaccia , può ereditare un'interfaccia. Ciò offre in alcuni casi una straordinaria flessibilità nell'utilizzo di Enum come implementazione personalizzata. Ecco un buon esempio di utilizzo di Enum in questa veste. 2) Enum può ereditare (estendere) la classe? No non può! Inaspettato, poiché in precedenza si era detto che il tipo Enum è simile a una classe o interfaccia in Java. Ebbene, questo è il motivo principale per cui questa domanda viene posta subito dopo la precedente. Poiché Enum eredita già dalla classe astratta java.lang.Enum , è chiaro che un'altra classe non sarà in grado di ereditare poiché Java non supporta l'ereditarietà di classi multiple. Ereditando da java.lang.Enum , tutte le enumerazioni hanno metodi ordinal() , value() o valueOf() . 3) Come creare un Enum senza istanze di oggetti? È possibile senza errori di compilazione? Questa è una di quelle domande complicate che gli intervistatori adorano. Poiché un Enum è visto come una raccolta di un certo numero di oggetti, come i giorni della settimana o i mesi dell'anno, ottenere un Enum senza nulla sembra sospetto. Ma sì, puoi creare un Enum senza istanze , ad esempio creando una classe di utilità. Questo è un altro modo innovativo di utilizzare Enum: public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } 4) Possiamo sovrascrivere il metodo toString() per Enum? Cosa succede se non ridefiniamo? Ovviamente puoi sovrascrivere il metodo toString() di Enum , poiché puoi sovrascrivere qualsiasi classe che eredita java.lang.Object e ha un metodo toString() disponibile, e anche se non lo fai, non perderai nulla perché l'abstract base della classe Enum lo farà per te e restituirà il nome, che è il nome dell'istanza Enum. Ecco il codice per il metodo toString() dalla classe Enum: public String toString() { return name; } nome viene specificato quando il compilatore alloca il codice per creare un'enumerazione in risposta alla creazione di un'istanza nella classe Enum stessa, nonché alla creazione di un ordinale nel costruttore dalla Classe java.lang.Enum : protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } questo è l'unico costruttore per creare enum , che viene chiamato dal compilatore in risposta alla dichiarazione di Enum nel programma. 5) Possiamo istanziare un Enum al di fuori di un Enum? Perché no? Non puoi istanziare un Enum al di fuori dei limiti di un Enum perché Enum non ha un pubblicocostruttore e il compilatore non ti consentirà di introdurre alcun costruttore di questo tipo. Poiché il compilatore genera la maggior parte del codice in risposta alla dichiarazione del tipo Enum, non consente costruttori pubblici all'interno di Enum, forzando la dichiarazione interna delle istanze Enum. 6) Possiamo specificare un costruttore all'interno di un Enum? Questa domanda spesso segue la precedente. Sì, puoi, ma ricorda che questo è possibile solo con costruttori privati ​​o con pacchetto privato . I costruttori con public e protected non sono ammessi in Enum. Qui puoi vedere un esempio. 7) Qual è la differenza tra confrontare Enum utilizzando il metodo == o equals()? Si tratta di una questione molto ampia e complessa che viene trattata in dettaglio qui . 8) Cosa fa il metodo ordinal() in Enum? Il metodo ordinal() restituisce l'ordine in cui le istanze Enum sono designate all'interno di Enum. Ad esempio, in DayOfWeek Enum, puoi specificare i giorni in ordine: public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } e se chiamiamo il metodo DayOfWeek.MONDAY.ordinal() , restituirà 0, che significa la prima istanza. Questo metodo è molto utile per dare ordine secondo lo stato reale delle cose: indicare cioè che MARTEDÌ (martedì) viene dopo LUNEDI ' (lunedì), e prima di MERCOLEDI' (mercoledì). Allo stesso modo, puoi utilizzare un'enumerazione per rappresentare i mesi dell'anno, dove febbraio viene dopo gennaio ma prima di marzo. Tutte le enumerazioni personalizzate ereditano questo metodo dalla classe astratta java.lang.Enum e vengono impostate dal compilatore chiamando il costruttore protetto su java.lang.Enum , che accetta un nome e un ordinale. 9) È possibile utilizzare Enum con TreeSet o TreeMap in Java? Questa è una domanda Enum davvero interessante e quella che le persone amano chiedere per testare la loro profondità di conoscenza. Fino a quando non guarderai il codice java.lang.Enum , probabilmente non saprai che Enum eredita l'interfaccia Comparable , che è un requisito chiave per l'uso in raccolte ordinate come TreeSet e TreeMap . Poiché Enum eredita l'interfaccia Comparable per impostazione predefinita , può essere utilizzato con TreeSet e TreeMap . 10) Qual è la differenza tra ordinal() e compareTo() in Enum? Ciò deriva direttamente dalla domanda precedente: compareTo() infatti simula l'ordine fornito dal metodo ordinal() , che è l'ordine naturale di Enum. In breve, Enum limita i confronti nell'ordine in cui vengono dichiarati. Inoltre, vale la pena ricordare che queste costanti sono confrontabili solo con altre costanti dello stesso tipo: il confronto di diversi tipi di costanti può portare a un errore del compilatore. 11) È possibile utilizzare Enum in un caso di switch? Si, puoi. Inoltre, questo è uno dei principali vantaggi dell'utilizzo di Enum. Poiché le istanze Enum vengono compilate in una costante temporanea, puoi tranquillamente inserirle all'interno di case e switch . Ecco un esempio di codice con i giorni della settimana: 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 e Switch si completano bene a vicenda, soprattutto se Enum contiene un numero limitato di costanti stabili, ad esempio sette giorni della settimana, 12 mesi dell'anno, ecc. Guarda altri esempi di utilizzo di switch case con Enum . 12) Come scorrere un'intera istanza Enum? Se hai aperto java.lang.Enum , sai che il metodovalues() restituisce un array di tutte le costanti Enum. Poiché ogni enum eredita java.lang.Enum , hanno un metodovalue() . Usandolo, puoi scorrere tutte le costanti di un'enumerazione di un certo tipo. Guarda gli esempi di ciò che avviene con un ciclo foreach e il metodo value() . 13) Quali sono i pro e i contro dell'utilizzo di Enum come singleton? Enum fornisce una scorciatoia rapida per implementare il modello singleton e, poiché è trattato anche nel libro Effective Java, è una scelta popolare. A prima vista, il singleton Enum è promettente e abbastanza conveniente, poiché controlla l'istanziazione, è serializzabile in modo sicuro e, soprattutto, è facile creare un singleton thread-safe utilizzando Enum. Non devi più preoccuparti di ricontrollare la volatilità delle variabili. Maggiori informazioni sui pro e contro dell'utilizzo di questo approccio qui . 14) Qual è il vantaggio di utilizzare Enum invece dei modelli di enumerazione int e String? Se programmi da più di 5 anni e utilizzi ancora JDK 1.3 o 1.4, avrai familiarità con i modelli String e int enumeration , che utilizzano un prefisso costante finale statico pubblico per rappresentare una raccolta di codici fissi noti numeri di cose, come i giorni della settimana . Qui ci sono molti problemi: non hai l'indipendenza dal tipo Enum, poiché la variabile String responsabile del giorno della settimana può assumere qualsiasi valore arbitrario. Allo stesso modo, un int enumerabile può assumere qualsiasi valore e il compilatore lo inghiottirà volentieri. E utilizzando Enum , ottieni l'indipendenza dal tipo che il compilatore controlla per te. Ci sono alcune riflessioni interessanti su questo argomento in Effective Java, che è una lettura consigliata a tutti gli sviluppatori Java. 15) Come convertire String in Enum? Questa è una domanda quotidiana che sorge a causa della popolarità dell'utilizzo di String ed Enum nello sviluppo di applicazioni Java. Il modo migliore per convertire un Enum in una String è definire un metodo factory sull'Enum stesso che accetterà gli argomenti String e lo restituirà come Enum . Potresti anche voler ignorare maiuscole e minuscole. Ecco alcuni esempi di trasformazione delle stringhe in enumerazioni. Questo ci porta alla fine del nostro elenco di 15 domande ( e risposte ) su Enum. Ma ricorda: leggere non basta per imparare, è solo il primo passo . Per trarre vantaggio dalle enumerazioni, prova a scoprire dove puoi utilizzare Enum nel tuo progetto: questo ti darà un'esperienza nel mondo reale e con questa esperienza imparerai di più che dagli esempi, poiché incontrerai più problemi che potrai gestire in più modi complessi e dettagliati. Vale la pena prestare attenzione a queste domande su Enum per testare le tue conoscenze, soprattutto se hai fretta per un colloquio e semplicemente non c'è tempo per un'immersione dettagliata nell'universo di Enum.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION