{"componentChunkName":"component---src-templates-blog-post-js","path":"/java-iniciante-p9/","result":{"data":{"markdownRemark":{"html":"<p>Nos artigos anteriores estava sendo abordado o tema do básico de <strong>Programação Orientada a Objetos</strong> no <strong>Java</strong>; porém existem outros tópicos da linguagem que seria bom serem apresentados. Iniciaremos com <strong>Enumerações</strong> e no final desse artigo você será capaz de entender o que são, como criá-las e usar.</p>\n<p><strong>Enumerações</strong> foram introduzidas no <strong>Java5</strong> e são uma forma dos desenvolvedores trabalharem melhor com dados que não podem ser alterados do que usando <strong>constantes</strong>, ela foi introduzida como sendo um tipo novo na linguagem o que significa que os desenvolvedores ganharam uma forma de checagem de tipos em tempo de compilação, o que ajuda muito no desenvolvimento principalmente por que possíveis erros são apontados no momento em que estamos escrevendo o código ao invés de só perceber, se perceber, o erro quando o código já está rodando e sendo usado. Juntamente com a tipagem foi adicionado um pacote novo, o <strong>java.lang.Enum</strong> e com isso uma série de métodos foram herdados quando uma <strong>Enum</strong> é criada.</p>\n<p>Para entender a motivação para adicionar <strong>Enums</strong> no <strong>Java</strong> vamos supor que temos um código que valida o dia da semana, sabemos que os nomes dos dias da semana são imutáveis então podemos criar <strong>constantes</strong> para isso da seguinte forma:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">class</span> <span class=\"token class-name\">DiaDaSemana</span> <span class=\"token punctuation\">{</span>\n    \n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> DOMINGO <span class=\"token operator\">=</span> <span class=\"token string\">\"DOMINGO\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> SEGUNDA <span class=\"token operator\">=</span> <span class=\"token string\">\"SEGUNDA\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> TERCA <span class=\"token operator\">=</span> <span class=\"token string\">\"TERCA\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> QUARTA <span class=\"token operator\">=</span> <span class=\"token string\">\"QUARTA\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> QUINTA <span class=\"token operator\">=</span> <span class=\"token string\">\"QUINTA\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> SEXTA <span class=\"token operator\">=</span> <span class=\"token string\">\"SEXTA\"</span><span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">final</span> <span class=\"token class-name\">String</span> SABADO <span class=\"token operator\">=</span> <span class=\"token string\">\"SABADO\"</span><span class=\"token punctuation\">;</span>\n    \n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Tendo em mãos as <strong>contantes</strong> podemos criar o método que lida com o dia da semana e a partir dele toma alguma decisão:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">avaliaDiaDaSemana</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> diaDaSemana<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>diaDaSemana<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>DOMINGO<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DO DOMINGO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>SEGUNDA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA SEGUNDA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>TERCA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA TERCA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>QUARTA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA QUARTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>QUINTA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA QUINTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>SEXTA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA SEXTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>SABADO<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DO SABADO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>No código acima foi feito uso de um <strong>switch-case</strong> sem uma cláusula <strong>default</strong> pois o desenvolvedor assumiu que como esse método sempre vai receber dias da semana não haveria o por que adicionar um <strong>default</strong> pois não seria executado. Agora vamos simular um caso de uso e testar essa hipótese:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">main</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span><span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> args<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n\n    <span class=\"token class-name\">String</span> diaDaSemana <span class=\"token operator\">=</span> <span class=\"token string\">\"JANEIRO\"</span><span class=\"token punctuation\">;</span>\n    \n    <span class=\"token function\">avaliaDiaDaSemana</span><span class=\"token punctuation\">(</span>diaDaSemana<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Ao executar esse código nada será impresso pois houve uma falha no dado de entrada e isso não ficou explícito em nenhum ponto do código, uma possível solução aqui seria adicionar o <strong>default</strong> porém só estaríamos contornando o problema pois esse método permite a entrada de <strong>Strings</strong> mas no desenvolvimento nós queremos apenas dias da semana como uma entrada válida e se tentassem passar qualquer valor que não seja um dia da semana não poderia ser executado, graças as <strong>Enums</strong> isso se torna possível.</p>\n<h2 id=\"Criando-Enums\" style=\"position:relative;\">Criando Enums<a href=\"#Criando-Enums\" aria-label=\"Criando Enums permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Criar uma <strong>Enum</strong> é como criar uma <strong>classe</strong> porém utilizamos a palavra reservada <strong>enum</strong>, para ficar claro o código abaixo é a criação de uma <strong>Enum</strong> representando os dias da semana:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">enum</span> <span class=\"token class-name\">DiaDaSemana</span> <span class=\"token punctuation\">{</span>\n    DOMINGO<span class=\"token punctuation\">,</span>\n    SEGUNDA<span class=\"token punctuation\">,</span>\n    TERCA<span class=\"token punctuation\">,</span>\n    QUARTA<span class=\"token punctuation\">,</span>\n    QUINTA<span class=\"token punctuation\">,</span>\n    SEXTA\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Foi criado uma <strong>Enum</strong> simples e iremos evoluí-la ao passar do artigo e ver outras vantagens que ganhamos com iso. Uma <strong>enum</strong> carrega consigo um valor que por padrão é o próprio nome do item na <strong>Enum</strong>, então conseguimos fazer validações do tipo:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"DOMINGO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>O método <strong>valueOf</strong> que vem herdado do pacote <strong>java.lang.Enum</strong> retorna o item da <strong>Enum</strong> correspondente se o valor combinar com algum valor da <strong>Enum</strong> ou lança uma <strong>exceção</strong> <strong>IllegalArgumentException</strong> caso não encontre nenhum valor que combine com a <strong>String</strong> informada, você pode ter notado que bastou adicionar a palavra <strong>enum</strong> e automaticamente ganhamos vários métodos como o <strong>valueOf</strong>, <strong>name</strong>, <strong>ordinal</strong> e etc.</p>\n<h2 id=\"Usando-Enums\" style=\"position:relative;\">Usando Enums<a href=\"#Usando-Enums\" aria-label=\"Usando Enums permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Agora vamos alterar o método <strong>avaliaDiaDaSemana</strong> para trabalhar com a <strong>Enum DiaDaSemana</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">static</span> <span class=\"token keyword\">void</span> <span class=\"token function\">avaliaDiaDaSemana</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span> diaDaSemana<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">switch</span> <span class=\"token punctuation\">(</span>diaDaSemana<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">case</span> DOMINGO<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DO DOMINGO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> SEGUNDA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA SEGUNDA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> TERCA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA TERCA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> QUARTA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA QUARTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> QUINTA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA QUINTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> SEXTA<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DA SEXTA\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">case</span> SABADO<span class=\"token operator\">:</span>\n            <span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"EXECUTANDO REGRA DE NEGÓCIO DO SABADO\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n            <span class=\"token keyword\">break</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Agora o método recebe a <strong>Enum DiaDaSemana</strong> e não há como passar outro valor que não seja um <strong>DiaDaSemana</strong> para o método <strong>avaliaDiaDaSemana</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token function\">avaliaDiaDaSemana</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>DOMINGO<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Se tentarmos usar outro tipo que não seja um <strong>DiaDaSemana</strong> o código não irá compilar e se forçarmos o uso de outro valor será lançada uma <strong>Exception</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token comment\">//Não compila</span>\n<span class=\"token function\">avaliaDiaDaSemana</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"OutroValor\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        \n<span class=\"token comment\">//IllegalArgumentException</span>\n<span class=\"token function\">avaliaDiaDaSemana</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span><span class=\"token function\">valueOf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"DIA QUE NÃO EXISTE\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<h2 id=\"Atributos-e-metodos-com-Enums\" style=\"position:relative;\">Atributos e métodos com Enums<a href=\"#Atributos-e-metodos-com-Enums\" aria-label=\"Atributos e metodos com Enums permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Vimos o exemplo de como criar uma <strong>Enum</strong> do jeito mais simples possível, porém <strong>Enums</strong> podem ter atributos e métodos associados a elas. Isso ocorre pois uma <strong>Enumeração</strong> se comporta como se fosse uma classe estática, uma classe que não pode ser instanciada, então se é uma classe é possível existir atributos e métodos, a própria utilização de uma <strong>Enum</strong> se assemelha ao uso de um método estático, exemplo: <strong>DiaDaSemana.DOMINGO</strong>. Por conta disso caso seja necessário ter métodos ou atributos que auxiliem na execução de <strong>Enums</strong> podemos adicionar da seguinte maneira, começando pelo atributos:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">enum</span> <span class=\"token class-name\">DiaDaSemana</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token function\">DOMINGO</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Domingo\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">SEGUNDA</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Segunda\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">TERCA</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Terça\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">QUARTA</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Quarta\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">QUINTA</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Quinta\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">SEXTA</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Sexta\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">,</span>\n    <span class=\"token function\">SABADO</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"Sábado\"</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">private</span> <span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">;</span>\n\n    <span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">String</span> nome<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>nome <span class=\"token operator\">=</span> nome<span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>Como <strong>Enums</strong> se comportam como classes, com a exceção de que não podem ser instanciadas, podemos criar atributos mas para ligá-los ao itens da <strong>Enum DiaDaSemana</strong> é necessário que esses itens, da <strong>Enum</strong>, estejam instanciados dentro da <strong>Enum</strong> e para isso foi criado um construtor, que não é público, fazendo a ligação do atributo <strong>nome</strong> para cada item no <strong>Enum</strong> e por fim foi criado um valor para cada um deles. </p>\n<p>Para criar métodos em <strong>Enums</strong> é o mesmo que criar métodos em classes:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token class-name\">String</span> <span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">return</span> <span class=\"token keyword\">this</span><span class=\"token punctuation\">.</span>nome<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>A utilização dos métodos é muito parecido com o que vemos em métodos estáticos:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>DOMINGO<span class=\"token punctuation\">.</span><span class=\"token function\">getNome</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>E o resultado é o atributo nome que está associado ao item <strong>DOMINGO</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"bash\"><pre class=\"language-bash\"><code class=\"language-bash\">Domingo</code></pre></div>\n<p>Para esclarecer um pouco mais vamos criar outro método para verificar se o dia é final de semana:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token keyword\">public</span> <span class=\"token keyword\">boolean</span> <span class=\"token function\">verificaFinalDeSemana</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">this</span> <span class=\"token operator\">==</span> SABADO <span class=\"token operator\">||</span> <span class=\"token keyword\">this</span> <span class=\"token operator\">==</span> DOMINGO<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">return</span> <span class=\"token boolean\">true</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token keyword\">return</span> <span class=\"token boolean\">false</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<p>O método acima verifica se o dia testado é um sábado ou domingo e retorna um <strong>true</strong> caso seja e um <strong>false</strong> caso não seja, perceba que é passado o operador <strong>this</strong> e ele se refere a instancia do item do <strong>Enum</strong> que irá chamar o método <strong>verificaFinalDeSemana</strong>:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>SEGUNDA<span class=\"token punctuation\">.</span><span class=\"token function\">verificaFinalDeSemana</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n<span class=\"token class-name\">System</span><span class=\"token punctuation\">.</span>out<span class=\"token punctuation\">.</span><span class=\"token function\">println</span><span class=\"token punctuation\">(</span><span class=\"token class-name\">DiaDaSemana</span><span class=\"token punctuation\">.</span>SABADO<span class=\"token punctuation\">.</span><span class=\"token function\">verificaFinalDeSemana</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span></code></pre></div>\n<p>Então quando o <strong>Enum DiaDaSemana.SEGUNDA</strong> chamar o método <strong>verificaFinalDeSemana</strong> o <strong>this</strong> se refere a <strong>SEGUNDA</strong> e assim em todos os itens da <strong>Enum</strong>, rodando esse código o resultado é:</p>\n<div class=\"gatsby-highlight\" data-language=\"java\"><pre class=\"language-java\"><code class=\"language-java\"><span class=\"token boolean\">false</span>\n<span class=\"token boolean\">true</span></code></pre></div>\n<h2 id=\"Conclusao\" style=\"position:relative;\">Conclusão<a href=\"#Conclusao\" aria-label=\"Conclusao permalink\" class=\"anchor after\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a></h2>\n<p>Quando se trabalha com <strong>Enum</strong> na maioria das vezes é por que existe uma coleção de dados que devem constante e queremos que isso seja garantido, <strong>Enums</strong> suprem muito bem essa necessidade. Existem outras maneiras de trabalhar com <strong>Enums</strong> como <strong>EnumSet</strong> e <strong>EnumMap</strong> porém esses são tópicos mais avançados de <strong>Enums</strong> e não tão comumente usados no dia-a-dia, porém com o que foi passado você será capaz de entender quando usar <strong>Enums</strong> e como usá-las para tirar o máximo proveito possivel delas.</p>\n<p>O código deste artigo se encontra no <a href=\"https://github.com/guilhermegarcia86/helloworld\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">GitHub</a></p>\n<p>Visite também o nosso canal no <a href=\"https://www.youtube.com/channel/UCDWmrzFPkkQf5VI_ziZrgvw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Youtube</a> para mais acompanhar essa série de <strong>Primeiros passos com o Java</strong> e muito mais conteúdos sobre programação.</p>","fields":{"slug":"/java-iniciante-p9/"},"frontmatter":{"date":"30 de novembro de 2021","description":"Trabalhando com Enums","title":"Primeiros passos com Java IX","tags":["Java","Beginner","Enum"],"author":"Guilherme Alves","image":{"id":"5b21dfd9-af99-53bb-8498-fb8d8663dc0b","publicURL":"/static/dfa3c34489461fb09c8684bfafdfb30f/java-artigoIX.png","childImageSharp":{"fluid":{"base64":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAOCAYAAAAvxDzwAAAACXBIWXMAABYlAAAWJQFJUiTwAAAB2klEQVQ4y31U227qMBB0bOd+IQGVUlpRoIKcI6LygOChUiv4AVT1//9lurskqWl7zsPK9mZ3PDNrRWnPQxceh1LQ1sIOKtgghI1imCSF1hpurVvPq6I18H2oLuEWmaKEDiMC9mHy4nIJ5wnU/AKsW+AwCKD6JBXKjdw0KC8gaSaAhvb/AnIBg4AYXhdq+WBJIstlhnZ0A8N7T/V1wtS7vqCX7EpVrXxrDGycSKPNB7BZDu2w9H6R/wOQgxPMUP0nuM6nobnnH4B8KIoCVVliMZ+j2WxwN5lg/viIpmlwP51iNpthTt+WyyW2z89Yr1YYj8f9wL6m3ErQrYQVFR6PR2nY7XZ4e33Dhi7YbrcCfjgccDqdcNjv8fdPLUCmVSZT9hz/AkqkSSLgcRQhCkPZT25vkaVp77FrgV830OWw7+8BO+8YJCFQXjkYmEH5myXv3GFkeY58/4Js+gCfXoHtHrZqJ8jAORUNh0Pxs6oqjEYj2ZsWVDmePS0W+Hh/x7quRZmh16H4iZTUEMdxL4dz7EdIDHmirsc+sbDWiKJ6vcb5fJYhinxmyM08YWaWZZkE35a0wfuU/Luc44sdbIPjZWeJALoGM2VmxWzTDswBZyBmziTkH/BtSAz4CX11Msd/ZCEtAAAAAElFTkSuQmCC","aspectRatio":1.4096916299559472,"src":"/static/dfa3c34489461fb09c8684bfafdfb30f/0823f/java-artigoIX.png","srcSet":"/static/dfa3c34489461fb09c8684bfafdfb30f/c67b7/java-artigoIX.png 320w,\n/static/dfa3c34489461fb09c8684bfafdfb30f/d3930/java-artigoIX.png 640w,\n/static/dfa3c34489461fb09c8684bfafdfb30f/0823f/java-artigoIX.png 1280w,\n/static/dfa3c34489461fb09c8684bfafdfb30f/17523/java-artigoIX.png 1747w","sizes":"(max-width: 1280px) 100vw, 1280px"}}}},"timeToRead":7}},"pageContext":{"slug":"/java-iniciante-p9/","previous":{"fields":{"slug":"/java-iniciante-pt8/"},"frontmatter":{"title":"Primeiros passos com Java VIII","date":"17 nov, 2021"}},"next":{"fields":{"slug":"/java-iniciante-pt10/"},"frontmatter":{"title":"Primeiros passos com Java X","date":"10 dez, 2021"}}}},"staticQueryHashes":["63159454"]}