JavaRush /Blog Java /Random-FR /15 questions d'entretien avec les développeurs concernant...
Treefeed
Niveau 21

15 questions d'entretien avec les développeurs concernant Enum en Java (avec réponses !)

Publié dans le groupe Random-FR
L'énumération ( Enum ) a été introduite dans Java 5 et depuis lors, elle est devenue très populaire parmi les développeurs Java. Il est largement utilisé dans diverses applications Java. Étant donné qu'Enum en Java est beaucoup plus polyvalent qu'en C ou C++, il présente également de nombreux cas d'utilisation intéressants, dont vous avez vu quelques-uns dans l'article 10 façons d'utiliser Enum en Java . Mais malgré cette popularité, de nombreux programmeurs Java ignorent encore les fonctionnalités fournies par Enum et les subtilités de l'utilisation d'Enum dans le code Java. Cela est devenu clair lorsque plusieurs lecteurs ont demandé, par exemple, la capacité d'Enum à implémenter une interface en Java ou pourquoi nous ne pouvons pas instancier Enums en dehors d'Enum , notant qu'ils avaient été interrogés à ce sujet lors d'une interview. Cela nous a inspiré à compiler une liste de questions fréquemment posées dans Java Enum qui vous aident non seulement à réussir les entretiens, mais ouvrent également de nouvelles voies d'apprentissage. Comme indiqué précédemment, les questions d'entretien vous obligent souvent à prendre le sujet plus au sérieux, ce qui n'est pas une mauvaise chose, et étant donné la puissance et l'utilité d'Enum, il est temps que vous deveniez un maître de l'énumération. Vous trouverez ci-dessous une liste de questions basées sur diverses fonctionnalités et propriétés d'Enum. Vous pouvez l’utiliser comme matériel préparatoire à un entretien ou simplement comme guide de dénombrement. Si vous êtes nouveau sur Java, vous apprendrez beaucoup de choses nouvelles et utiles sur Enum. 1) Enum peut-il implémenter une interface en Java ? Oui, Enum peut hériter des interfaces . Étant donné que le type Enum est similaire à une classe et à une interface , il peut hériter d'une interface. Cela donne une flexibilité incroyable dans l'utilisation d'Enum comme implémentation personnalisée dans certains cas. Voici un bon exemple d'utilisation d'Enum à ce titre. 2) Enum peut-il hériter (étendre) de la classe ? Non il ne peut pas! Inattendu, puisqu'il a été dit précédemment que le type Enum est similaire à une classe ou une interface en Java. Eh bien, c’est la principale raison pour laquelle cette question est posée juste après la précédente. Puisque Enum hérite déjà de la classe abstraite java.lang.Enum , il est clair qu'une autre classe ne pourra pas hériter puisque Java ne prend pas en charge l'héritage de plusieurs classes. En héritant de java.lang.Enum , toutes les énumérations ont des méthodes ordinal() , values() ou valueOf() . 3) Comment créer un Enum sans instances d'objet ? Est-ce possible sans erreur de compilation ? C’est l’une de ces questions délicates que les intervieweurs adorent. Puisqu'un Enum est vu comme une collection d'un certain nombre d'objets, comme les jours de la semaine ou les mois de l'année, obtenir un Enum sans rien semble suspect. Mais oui, vous pouvez créer un Enum sans instances , par exemple en créant une classe utilitaire. C'est une autre façon innovante d'utiliser Enum : public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } 4) Pouvons-nous remplacer la méthode toString() pour Enum ? Que se passe-t-il si nous ne redéfinissons pas ? Bien sûr, vous pouvez remplacer la méthode toString() d'Enum , comme vous pouvez remplacer n'importe quelle classe qui hérite de java.lang.Object et dispose d'une méthode toString() disponible, et même si vous ne le faites pas, vous ne perdrez rien car le résumé La base de la classe Enum fera cela pour vous et renverra le nom, qui est le nom de l'instance Enum. Voici le code de la méthode toString() de la classe Enum : public String toString() { return name; } le nom est spécifié lorsque le compilateur alloue du code pour créer une énumération en réponse à la création d'une instance dans la classe Enum elle-même, ainsi qu'à la création d'un ordinal dans le constructeur à partir du Classe java.lang.Enum : protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } C'est le seul constructeur permettant de créer enum , qui est appelé par le compilateur en réponse à la déclaration d'Enum dans le programme. 5) Pouvons-nous instancier un Enum en dehors d’un Enum ? Pourquoi pas? Vous ne pouvez pas instancier un Enum en dehors des limites d'un Enum car Enum n'a pas de publicconstructeur, et le compilateur ne vous permettra pas d'introduire un tel constructeur. Étant donné que le compilateur génère la plupart du code en réponse à la déclaration de type Enum, il n'autorise pas les constructeurs publics dans Enums, ce qui oblige les instances Enum à être déclarées en interne. 6) Pouvons-nous spécifier un constructeur à l’intérieur d’un Enum ? Cette question suit souvent la précédente. Oui, vous pouvez, mais rappelez-vous que cela n'est possible qu'avec des constructeurs privés ou privés de packages . Les constructeurs avec public et protected ne sont pas autorisés dans Enum. Ici vous pouvez voir un exemple. 7) Quelle est la différence entre comparer Enum en utilisant la méthode == ou equals() ? Il s'agit d'une question très vaste et délicate qui est traitée en détail ici . 8) Que fait la méthode ordinal() dans Enum ? La méthode ordinal() renvoie l'ordre dans lequel les instances Enum sont désignées dans Enum. Par exemple, dans DayOfWeek Enum, vous pouvez spécifier les jours dans l'ordre : public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } et si nous appelons la méthode DayOfWeek.MONDAY.ordinal() , elle renverra 0 - ce qui signifie la première instance. Cette méthode est très utile pour mettre de l'ordre en fonction de l'état actuel des choses : c'est-à-dire pour indiquer que MARDI (mardi) vient après LUNDI (lundi) et avant MERCREDI (mercredi). De même, vous pouvez utiliser une énumération pour représenter les mois de l’année, où février vient après janvier mais avant mars. Toutes les énumérations personnalisées héritent de cette méthode de la classe abstraite java.lang.Enum , et elles sont définies par le compilateur en appelant le constructeur protégé sur java.lang.Enum , qui prend un nom et un ordinal. 9) Est-il possible d'utiliser Enum avec TreeSet ou TreeMap en Java ? C'est une question Enum vraiment intéressante, et que les gens aiment poser pour tester leurs connaissances approfondies. Jusqu'à ce que vous regardiez le code java.lang.Enum , vous ne saurez probablement pas qu'Enum hérite de l'interface Comparable , qui est une condition essentielle pour une utilisation dans des collections ordonnées comme TreeSet et TreeMap . Puisque Enum hérite de l'interface Comparable par défaut , elle peut être utilisée avec TreeSet et TreeMap . 10) Quelle est la différence entre ordinal() et compareTo() dans Enum ? Cela découle directement de la question précédente : en fait, compareTo() simule l'ordre fourni par la méthode ordinal() , qui est l'ordre naturel d'Enum. En bref, Enum restreint les comparaisons dans l'ordre dans lequel elles sont déclarées. Il convient également de rappeler que ces constantes ne sont comparables qu'à d'autres constantes du même type - la comparaison de différents types de constantes peut entraîner une erreur du compilateur. 11) Est-il possible d'utiliser Enum dans un boîtier de commutation ? Oui, vous pouvez. De plus, c’est l’un des principaux avantages de l’utilisation d’Enum. Étant donné que les instances Enum se compilent en une constante temporaire, vous pouvez les injecter en toute sécurité dans case et switch . Voici un exemple de code avec les jours de la semaine : 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 et Switch se complètent bien, surtout si Enum contient un petit nombre de constantes stables, par exemple sept jours de la semaine, 12 mois de l'année, etc. Regardez d'autres exemples d'utilisation de swith case avec Enum . 12) Comment parcourir une instance Enum entière ? Si vous avez ouvert java.lang.Enum , vous savez que la méthode values() renvoie un tableau de toutes les constantes Enum. Puisque chaque énumération hérite de java.lang.Enum , ils ont une méthode values() . En l'utilisant, vous pouvez parcourir toutes les constantes d'une énumération d'un certain type. Regardez des exemples de cela avec une boucle foreach et la méthode values() . 13) Quels sont les avantages et les inconvénients de l’utilisation d’Enum comme singleton ? Enum fournit un raccourci rapide pour implémenter le modèle singleton, et comme il est même couvert dans le livre Effective Java, c'est un choix populaire. À première vue, le singleton Enum est prometteur et assez pratique, car il contrôle l'instanciation, est sérialisable en toute sécurité et, surtout, il est facile de créer un singleton thread-safe à l'aide d'Enum. Vous n’avez plus à vous soucier de vérifier la volatilité des variables. En savoir plus sur les avantages et les inconvénients de l'utilisation de cette approche ici . 14) Quel est l'avantage d'utiliser Enum au lieu des modèles d'énumération int et String ? Si vous programmez depuis plus de 5 ans et que vous êtes toujours dans JDK 1.3 ou 1.4, vous serez familier avec les modèles d'énumération String et int , qui utilisent un préfixe de constante finale statique publique pour représenter une collection de constantes fixes bien connues. un certain nombre de choses, comme les jours de la semaine . Il y a ici de nombreux problèmes : vous n'avez pas d'indépendance du type Enum, puisque la variable String responsable du jour de la semaine peut prendre n'importe quelle valeur arbitraire. De même, un int énumérable peut prendre n'importe quelle valeur, et le compilateur l'avalera volontiers. Et en utilisant Enum , vous obtenez la sécurité de type que le compilateur vérifie pour vous. Il y a quelques réflexions intéressantes sur ce sujet dans Effective Java, dont la lecture est recommandée à tous les développeurs Java. 15) Comment convertir une chaîne en une énumération ? C'est une question quotidienne qui se pose en raison de la popularité de l'utilisation de String et Enum dans le développement d'applications Java. La meilleure façon de convertir un Enum en String est de définir une méthode d'usine sur Enum lui-même qui prendra les arguments String et les renverra sous forme de Enum . Vous souhaiterez peut-être également ignorer la casse. Voici quelques exemples de transformation de chaînes en énumérations. Cela nous amène à la fin de notre liste de 15 questions ( et réponses ) sur Enum. Mais n’oubliez pas : lire ne suffit pas pour apprendre, ce n’est que la première étape . Pour bénéficier des énumérations, essayez de trouver où vous pouvez utiliser Enum dans votre projet - cela vous donnera une expérience du monde réel, et avec cette expérience, vous apprendrez plus que des exemples, car vous rencontrerez plus de problèmes que vous pourrez gérer plus facilement. des moyens complexes et détaillés. Ces questions sur Enum méritent d'être prises en compte pour tester vos connaissances, surtout si vous êtes pressé pour un entretien et que vous n'avez tout simplement pas le temps pour une immersion détaillée dans l'univers Enum.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION