JavaRush /Java-Blog /Random-DE /15 Fragen im Entwicklerinterview zu Enum in Java (mit Ant...
Treefeed
Level 21

15 Fragen im Entwicklerinterview zu Enum in Java (mit Antworten!)

Veröffentlicht in der Gruppe Random-DE
Die Aufzählung ( Enum ) wurde in Java 5 eingeführt und erfreut sich seitdem großer Beliebtheit bei Java-Entwicklern. Es wird häufig in verschiedenen Java-Anwendungen verwendet. Da Enum in Java viel vielseitiger ist als in C oder C++, bietet es auch viele interessante Anwendungsfälle, von denen Sie einige im Artikel 10 Möglichkeiten zur Verwendung von Enum in Java gesehen haben . Doch trotz dieser Beliebtheit sind sich viele Java-Programmierer immer noch nicht der von Enum bereitgestellten Funktionalität und der Feinheiten der Verwendung von Enum in Java-Code bewusst. Dies wurde deutlich, als mehrere Leser beispielsweise nach der Fähigkeit von Enum fragten, eine Schnittstelle in Java zu implementieren oder warum wir Enums außerhalb von Enum nicht instanziieren können , und wiesen darauf hin, dass sie in einem Interview dazu befragt wurden. Dies hat uns dazu inspiriert, eine Liste häufig gestellter Fragen in Java Enum zusammenzustellen , die Ihnen nicht nur zum Erfolg bei Vorstellungsgesprächen verhelfen, sondern auch neue Möglichkeiten zum Lernen eröffnen. Wie bereits erwähnt, zwingen Sie Interviewfragen oft dazu, das Thema ernster zu nehmen, was keine schlechte Sache ist, und angesichts der Leistungsfähigkeit und Nützlichkeit von Enum ist es an der Zeit, ein Enum-Meister zu werden. Nachfolgend finden Sie eine Liste mit Fragen, die auf verschiedenen Funktionen und Eigenschaften von Enum basieren. Sie können es als Vorbereitungsmaterial für ein Interview oder einfach als Leitfaden für die Aufzählung verwenden. Wenn Sie Java-Neuling sind, werden Sie viele neue und nützliche Dinge über Enum lernen. 1) Может ли Enum наследовать (implement) интерфейс в Java? Да, Enum может наследовать интерфейсы. Поскольку Enum тип схож с классом и интерфейсом, он может наследовать интерфейс. Это даёт поразительную гибкость в использовании Enum в качестве специальной реализации в некоторых случаях. Вот неплохой пример использования Enum в таком качестве. 2) Может ли Enum наследовать (extends) класс? Нет, не может! Неожиданно, поскольку ранее говорилось что Enum тип похож на класс oder интерфейс в Java. Ну, это главная причина, почему такой вопрос задают сразу за предыдущим. Поскольку Enum уже наследуется от абстрактного класса java.lang.Enum, понятно, что другой класс наследовать не удастся, поскольку Java не поддерживает множественное наследование классов. Благодаря наследованию от java.lang.Enum, все перечисления имеют методы ordinal(), values() oder valueOf(). 3) Как создать Enum без экземпляров ein Objektов? Возможно ли это без ошибки компиляции? Это один из тех хитрых вопросов, которые так любят интервьюеры. Поскольку Enum видится коллекцией определённого количества ein Objektов, Wie дни недели oder месяцы в году получить Enum без ничего кажется подозрительным. Но да, вы можете создать Enum без экземпляров, например создавая утoderтарный класс. Это ещё один инновационный способ использовать Enum: public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } 4) Можем ли мы переопределить метод toString() для Enum? Was будет, если не будем переопределять? Конечно вы можете переопределить метод toString() у Enum, Wie и любого класса, наследующего java.lang.Object и имеющего метод toString() в доступности, и даже если вы не станете этого делать, ничего не потеряете, поскольку абстрактная основа класса Enum сделает это за вас, и вернёт Name, являющееся именем экземпляра Enum. Вот Code метода toString() из класса Enum: public String toString() { return name; } name задано, когда компилятор выделяет Code для создания перечисления в ответ на создание экземпляра в самом классе Enum, наравне с созданием порядкового числительного в конструкторе из класса java.lang.Enum: protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } Это единственный конструктор для создания перечисления, который вызывается компилятором в ответ на декларирование Enum в программе. 5) Можем ли мы создать экземпляр Enum вне Enum? Почему нет? Вы не можете создавать экземпляры Enum вне границ Enum, поскольку у Enum нет public конструктора, и компилятор не позволит вам внести любой подобный конструктор. Так Wie компилятор генерирует большинство Codeа в ответ на декларацию Enum типа, он не допускает public конструкторов внутри Enum, что заставляет объявлять экземпляры Enum внутри себя. 6) Можем ли мы указать конструктор внутри Enum? Этот вопрос часто следует за предыдущим. Да, вы можете, но помните, что подобное возможно лишь с указанием private oder package-private конструкторов. Конструкторы с public и protected — не допустимы в Enum. Вот тут можно посмотреть пример. 7) Какая разница сравнивать Enum при помощи == oder метода equals()? Это очень обширный и хитрый вопрос, который рассматривается подробно здесь. 8) Was делает метод ordinal() в Enum? Метод ordinal() (порядковый) возвращает порядок, в котором экземпляры Enum обозначены внутри Enum. Например, в DayOfWeek Enum, вы можете указать дни по порядку: public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } и если мы вызовем метод DayOfWeek.MONDAY.ordinal(), он вернёт 0 - что значит первый экземпляр. Этот метод весьма полезен для предоставления порядка в соответствии с реальным положением вещей: т. е. указывая, что TUESDAY (вторник) идёт после MONDAY (понедельника), и перед WEDNESDAY (средой). Точно так же вы можете использовать перечисление для представления месяцев года, где Февраль идёт после Января, но предшествует Марту. Все пользовательские перечисления наследуют этот метод из абстрактного класса java.lang.Enum, и они устанавливаются компилятором, вызывая protected конструктор из java.lang.Enum, который принимает Name и порядковый номер. 9) Можно использовать Enum с TreeSet oder TreeMap в Java? Это действительно интересный вопрос по Enum, и его любят задавать для проверки глубины знаний. Пока вы не загляните в Code java.lang.Enum, вы скорей всего не будете знать, что Enum наследует интерфейс Comparable, который является главным требованием для использования в упорядоченных коллекциях, Wie TreeSet и TreeMap. Поскольку Enum по умолчанию наследует интерфейс Comparable, он может использоваться с TreeSet и TreeMap. 10) Какая разница между ordinal() и compareTo() в Enum? Это прямое следование из предыдущего вопроса: на самом деле, compareTo() имитирует порядок, предоставляемый методом ordinal(), являющийся естественным порядком Enum. Если коротко, Enum ограничивает сравнения в порядке их объявления. Так же, стоит помнить, что данные константы сравнимы только с другими константами того же типа — сравнение разных типов констант может привести к ошибке компилятора. 11) Можно ли использовать Enum в switch case? Да, вы можете. Мало того, это одна из главных полезностей использования Enum. Поскольку экземпляры Enum компoderруют временную константу, вы можете без опаски внедрять их внутрь case и switch. Вот например Code с днями недели: 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 и Switch отлично дополняют друг друга, в особенности если Enum содержит небольшое количество устойчивых констант, например, семь дней недели, 12 месяцев года и т. д. Посмотрите на другие примеры использования swith case с Enum. 12) Как пройтись по всему экземпляру Enum? Если вы открывали java.lang.Enum, то знаете, что метод values() возвращает массив всех констант Enum. Поскольку каждое перечисление наследует java.lang.Enum, они имеют метод values(). Используя его, вы можете пройтись по всем константам перечисления определённого типа. Посмотрите на примеры такого проходя с циклом foreach и методом values(). 13) Какие плюсы и минусы использования Enum в качестве синглтона? Enum предоставляет быстрый ярлык для воплощения паттерна синглтона, и поскольку об этом сказано даже в книге «Эффективная Java», такой выбор весьма популярен. На первый взгляд, синглтон Enum многообещающ и весьма удобен, например контролирует создание экземпляра, безопасно сериализуется и прежде всего, легко создать потокобезопасный синглтон с использованием Enum. Вам не нужно больше заботиться о двойной проверке волатильности переменных. Более подробно о плюсах и минусах использования такого подхода тут. 14) Какая выгода использовать Enum anstatt паттернов перечисления int и перечисления String? Если вы программируете более 5 лет, и ещё застали JDK 1.3 oder 1.4, вы будете на короткой ноге с паттернами перечисления String и int, где используется public static final префикс констант для представления коллекции общеизвестных фиксированных количеств вещей, Wie Дни Недели. Тут возникает множество проблем: у вас нет независимости типа Enum, поскольку переменная String отвечающая за день недели может принимать любое произвольное Bedeutung. Точно так же перечисляемый int может принимать любое Bedeutung, и компилятор спокойно проглотит это. А с использованием Enum erhalten Sie die Typsicherheit, die der Compiler für Sie überprüft. Es gibt einige interessante Gedanken zu diesem Thema in Effective Java, dessen Lektüre allen Java-Entwicklern empfohlen wird. 15) Wie konvertiere ich String in Enum? Dies ist eine täglich gestellte Frage, da die Verwendung von String und Enum in der Java-Anwendungsentwicklung immer beliebter wird. Der beste Weg, ein Enum in einen String umzuwandeln, besteht darin, eine Factory-Methode für das Enum selbst zu definieren, die String- Argumente entgegennimmt und als Enum zurückgibt . Möglicherweise möchten Sie auch die Groß-/Kleinschreibung ignorieren. Hier sind einige Beispiele für die Umwandlung von Zeichenfolgen in Aufzählungen. Damit sind wir am Ende unserer Liste mit 15 Fragen ( und Antworten ) zu Enum angelangt. Aber denken Sie daran: Lesen reicht nicht aus, um zu lernen, es ist nur der erste Schritt . Um von Enums zu profitieren, versuchen Sie herauszufinden, wo Sie Enum in Ihrem Projekt verwenden können. Dadurch erhalten Sie praktische Erfahrungen, und mit dieser Erfahrung lernen Sie mehr als aus Beispielen, da Sie auf mehr Probleme stoßen, mit denen Sie besser umgehen können komplexe und detaillierte Wege. Anforderungen. Es lohnt sich, diesen Fragen zu Enum Aufmerksamkeit zu schenken, um Ihr Wissen zu testen, insbesondere wenn Sie es eilig zu einem Vorstellungsgespräch haben und einfach keine Zeit für ein detailliertes Eintauchen in das Enum-Universum haben.
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION