JavaRush /Blogue Java /Random-PT /15 perguntas da entrevista do desenvolvedor sobre Enum em...
Treefeed
Nível 21

15 perguntas da entrevista do desenvolvedor sobre Enum em Java (com respostas!)

Publicado no grupo Random-PT
A enumeração ( Enum ) foi introduzida no Java 5 e desde então se tornou bastante popular entre os desenvolvedores Java. É amplamente utilizado em vários aplicativos Java. Como Enum em Java é muito mais versátil do que em C ou C++, ele também apresenta muitos casos de uso interessantes, alguns dos quais você viu no artigo 10 maneiras de usar Enum em Java . Mas, apesar dessa popularidade, muitos programadores Java ainda desconhecem a funcionalidade fornecida pelo Enum e as complexidades do uso do Enum no código Java. Isso ficou claro quando vários leitores perguntaram, por exemplo, sobre a capacidade do Enum de implementar uma interface em Java ou Por que não podemos instanciar Enums fora do Enum , observando que foram questionados sobre isso em uma entrevista. Isso nos inspirou a compilar uma lista de perguntas frequentes sobre Java Enum que não apenas ajudam você a ter sucesso nas entrevistas, mas também abrem novos caminhos para o aprendizado. Como afirmado anteriormente, muitas vezes as perguntas das entrevistas forçam você a levar o assunto mais a sério, o que não é uma coisa ruim, e dado o poder e a utilidade do Enum, é hora de você se tornar um mestre em enum. Abaixo está uma lista de perguntas baseadas em várias funcionalidades e propriedades do Enum. Você pode usá-lo como material preparatório para uma entrevista ou apenas como um guia de enumeração. Se você é novo em Java, aprenderá muitas coisas novas e úteis sobre Enum. 1) O Enum pode implementar uma interface em Java? Sim, Enum pode herdar interfaces . Como o tipo Enum é semelhante a uma classe e a uma interface , ele pode herdar uma interface. Isso oferece uma flexibilidade incrível no uso do Enum como uma implementação personalizada em alguns casos. Aqui está um bom exemplo de uso de Enum nesta capacidade. 2) Enum pode herdar (estender) classe? Não, ele não pode! Inesperado, já que foi dito anteriormente que o tipo Enum é semelhante a uma classe ou interface em Java. Bem, esta é a principal razão pela qual esta pergunta é feita logo após a anterior. Como Enum já herda da classe abstrata java.lang.Enum , fica claro que outra classe não poderá herdar, pois Java não suporta herança de múltiplas classes. Ao herdar de java.lang.Enum , todos os enums possuem métodos ordinal() , values() ou valueOf() . 3) Como criar um Enum sem instâncias de objetos? Isso é possível sem erro de compilação? Esta é uma daquelas perguntas complicadas que os entrevistadores adoram. Como um Enum é visto como uma coleção de um certo número de objetos, como dias da semana ou meses do ano, obter um Enum sem nada parece suspeito. Mas sim, você pode criar um Enum sem instâncias , por exemplo criando uma classe utilitária. Esta é outra maneira inovadora de usar Enum: public enum MessageUtil{ ; // required to avoid compiler error, also signifies no instance public static boolean isValid() { throw new UnsupportedOperationException("Not supported yet."); } } 4) Podemos substituir o método toString() para Enum? O que acontece se não redefinirmos? É claro que você pode substituir o método toString() do Enum , pois pode substituir qualquer classe que herde java.lang.Object e tenha um método toString() disponível e, mesmo se não o fizer, não perderá nada porque o resumo base da classe Enum fará isso para você e retornará o nome, que é o nome da instância Enum. Aqui está o código para o método toString() da classe Enum: public String toString() { return name; } name é especificado quando o compilador aloca código para criar um enum em resposta à criação de uma instância na própria classe Enum, bem como à criação de um ordinal no construtor a partir do Classe java.lang.Enum : protected Enum(String name, int ordinal) { this.name = name; this.ordinal = ordinal; } Este é o único construtor para criar enum , que é chamado pelo compilador em resposta à declaração de Enum no programa. 5) Podemos instanciar um Enum fora de um Enum? Por que não? Você não pode instanciar um Enum fora dos limites de um Enum porque Enum não tem um públicoconstrutor, e o compilador não permitirá que você introduza tal construtor. Como o compilador gera a maior parte do código em resposta à declaração do tipo Enum, ele não permite construtores públicos dentro de Enums, forçando as instâncias de Enum a serem declaradas internamente. 6) Podemos especificar um construtor dentro de um Enum? Esta questão geralmente segue a anterior. Sim, você pode, mas lembre-se de que isso só é possível com construtores privados ou de pacote privado . Construtores com público e protegido não são permitidos no Enum. Aqui você pode ver um exemplo. 7) Qual é a diferença entre comparar Enum usando o método == ou equals()? Esta é uma questão muito ampla e complicada que é abordada em detalhes aqui . 8) O que o método ordinal() faz no Enum? O método ordinal() retorna a ordem em que as instâncias de Enum são designadas no Enum. Por exemplo, no DayOfWeek Enum, você pode especificar os dias em ordem: public enum DayOfWeek{ MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; } e se chamarmos o método DayOfWeek.MONDAY.ordinal() , ele retornará 0 - o que significa a primeira instância. Este método é muito útil para fornecer ordem de acordo com o estado real das coisas: ou seja, indicar que TERÇA (terça-feira) vem depois de SEGUNDA-FEIRA (segunda-feira) e antes de QUARTA-FEIRA (quarta-feira). Da mesma forma, você pode usar uma enumeração para representar os meses do ano, onde fevereiro vem depois de janeiro, mas vem antes de março. Todas as enumerações personalizadas herdam esse método da classe abstrata java.lang.Enum e são definidas pelo compilador chamando o construtor protegido em java.lang.Enum , que recebe um nome e um ordinal. 9) É possível usar Enum com TreeSet ou TreeMap em Java? Esta é uma pergunta Enum realmente interessante e que as pessoas gostam de fazer para testar sua profundidade de conhecimento. Até olhar o código java.lang.Enum , você provavelmente não saberá que Enum herda a interface Comparable , que é um requisito fundamental para uso em coleções ordenadas como TreeSet e TreeMap . Como Enum herda a interface Comparable por padrão , ele pode ser usado com TreeSet e TreeMap . 10) Qual é a diferença entre ordinal() e compareTo() em Enum? Isso decorre diretamente da pergunta anterior: na verdade, compareTo() simula a ordem fornecida pelo método ordinal() , que é a ordem natural do Enum. Resumindo, Enum restringe as comparações na ordem em que são declaradas. Além disso, vale lembrar que essas constantes são comparáveis ​​apenas com outras constantes do mesmo tipo - comparar diferentes tipos de constantes pode levar a um erro do compilador. 11) É possível usar Enum em um switch case? Sim você pode. Além disso, este é um dos principais benefícios do uso do Enum. Como as instâncias Enum são compiladas para uma constante temporária, você pode injetá-las com segurança dentro de case e switch . Aqui está um exemplo de código com dias da semana: 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 se complementam bem, especialmente se o Enum contiver um pequeno número de constantes estáveis, por exemplo, sete dias da semana, 12 meses do ano, etc. outros exemplos de uso de swith case com Enum . 12) Como iterar uma instância inteira do Enum? Se você abriu java.lang.Enum , você sabe que o método values() retorna um array de todas as constantes Enum. Como todo enum herda java.lang.Enum , eles têm um método values() . Usando-o, você pode iterar todas as constantes de uma enumeração de um determinado tipo. Veja exemplos disso acontecendo com um loop foreach e o métodovalues() . 13) Quais são os prós e os contras de usar Enum como singleton? Enum fornece um atalho rápido para implementar o padrão singleton e, como é abordado no livro Effective Java, é uma escolha popular. À primeira vista, o singleton Enum é promissor e bastante conveniente, pois controla a instanciação, é serializável com segurança e, acima de tudo, é fácil criar um singleton seguro para threads usando Enum. Você não precisa mais se preocupar em verificar novamente a volatilidade das variáveis. Leia mais sobre os prós e os contras de usar essa abordagem aqui . 14) Qual é a vantagem de usar Enum em vez de enumeração int e padrões de enumeração String? Se você programa há mais de 5 anos e ainda está no JDK 1.3 ou 1.4, estará familiarizado com os padrões de enumeração String e int , que usam um prefixo de constante final estática pública para representar uma coleção de padrões fixos bem conhecidos. várias coisas, como Dias da Semana . Há muitos problemas aqui: você não tem independência do tipo Enum, pois a variável String responsável pelo dia da semana pode assumir qualquer valor arbitrário. Da mesma forma, um int enumerável pode assumir qualquer valor e o compilador o engolirá com prazer. E usando Enum , você obtém a segurança de tipo que o compilador verifica para você. Existem algumas reflexões interessantes sobre este tópico em Effective Java, que é uma leitura recomendada para todos os desenvolvedores Java. 15) Como converter String em Enum? Esta é uma pergunta diária que surge devido à popularidade do uso de String e Enum no desenvolvimento de aplicações Java. A melhor maneira de converter um Enum em String é definir um método de fábrica no próprio Enum que receberá argumentos String e o retornará como Enum . Você também pode ignorar maiúsculas e minúsculas. Aqui estão alguns exemplos de como transformar strings em enumerações. Isso nos leva ao final de nossa lista de 15 perguntas ( e respostas ) sobre Enum. Mas lembre-se: ler não basta para aprender, é apenas o primeiro passo . Para se beneficiar dos enums, tente descobrir onde você pode usar o Enum em seu projeto - isso lhe dará experiência do mundo real, e com essa experiência você aprenderá mais do que com exemplos, pois encontrará mais problemas com os quais poderá lidar com mais formas complexas e detalhadas. Vale a pena prestar atenção nessas questões sobre Enum para testar seus conhecimentos, principalmente se você está com pressa para uma entrevista e simplesmente não há tempo para uma imersão detalhada no universo Enum.
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION