<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hamidur Rahman</title>
    <description>The latest articles on DEV Community by Hamidur Rahman (@hamidur01).</description>
    <link>https://dev.to/hamidur01</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F72959%2F2e91d440-dbfa-4a37-be9a-2fdc32acf0d3.jpg</url>
      <title>DEV Community: Hamidur Rahman</title>
      <link>https://dev.to/hamidur01</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hamidur01"/>
    <language>en</language>
    <item>
      <title>Everything about enum data type in Java</title>
      <dc:creator>Hamidur Rahman</dc:creator>
      <pubDate>Mon, 13 Apr 2020 15:54:04 +0000</pubDate>
      <link>https://dev.to/hamidur01/everything-about-enum-data-type-in-java-47ep</link>
      <guid>https://dev.to/hamidur01/everything-about-enum-data-type-in-java-47ep</guid>
      <description>&lt;p&gt;The goal of this article is to expose one to the &lt;code&gt;enum&lt;/code&gt; data type in &lt;code&gt;Java&lt;/code&gt;. I hope by reading this one would learn something new or brush up their knowledge on &lt;code&gt;Java&lt;/code&gt; &lt;code&gt;enum&lt;/code&gt; data type. So, let’s dive in.&lt;/p&gt;

&lt;h3&gt;
  
  
  The reason behind this article?
&lt;/h3&gt;

&lt;p&gt;Well, I have been using enum without knowing essential knowledge about that. Recently, in an interview, I was asked, can an enum have a &lt;code&gt;constructor and instance variables&lt;/code&gt;? I could not answer. The actual answer is yes. So, I decided to learn as much as I can on enum and share with others to let fall for the common pitfalls.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is the enum data type?
&lt;/h3&gt;

&lt;p&gt;As by &lt;code&gt;javadoc&lt;/code&gt; - &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;An enum type is a special data type that enables for a variable to be a set of predefined constants.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In other words, an enum data type is a set of constants and grouped together.&lt;/p&gt;

&lt;p&gt;An enum is just class type as we create classes in Java but with a different special keyword &lt;code&gt;enum&lt;/code&gt; and essentially do work as a simple Java class. All enum type implicitly extends &lt;code&gt;Enum&lt;/code&gt; from &lt;code&gt;java.lang&lt;/code&gt; package and can implement an &lt;code&gt;interface&lt;/code&gt;(s) as well as an enum can have &lt;code&gt;constructors, instance variables and methods&lt;/code&gt;. Every constant you defined in an enum will be &lt;code&gt;public static final&lt;/code&gt; by default. Every enum constant has an index number called &lt;code&gt;ordinal&lt;/code&gt; number. An ordinal number is just number that defines the position of that specific enum constant. The ordinal number starts with 0 as an array in most languages.&lt;/p&gt;

&lt;p&gt;One VERY dangerous miss conception would be - if an enum can have a constructor then I can create an instance of an enum using the new keyword. NO - you CANNOT instantiate an enum type but wait then why would an enum have a constructor? I will answer that later in this article.&lt;/p&gt;

&lt;p&gt;Let’s create a very basic enum type. Let’s take the measurement &lt;code&gt;Size&lt;/code&gt; as an example of an enum. When a company makes clothes they define there own size of their clothes (yes, there are some standard sizes but let’s not think of that).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="no"&gt;SMALL&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;// 0&lt;/span&gt;
   &lt;span class="no"&gt;MEDIUM&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// 1&lt;/span&gt;
   &lt;span class="no"&gt;LARGE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;       &lt;span class="c1"&gt;// 2&lt;/span&gt;

   &lt;span class="no"&gt;EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;     &lt;span class="c1"&gt;// 3&lt;/span&gt;
   &lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;   &lt;span class="c1"&gt;// 4&lt;/span&gt;

  &lt;span class="no"&gt;EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt;      &lt;span class="c1"&gt;// 5&lt;/span&gt;
  &lt;span class="no"&gt;EXTRA_EXTRA_LARGE&lt;/span&gt; &lt;span class="c1"&gt;// 6&lt;/span&gt;

&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;All the Sizes defined inside &lt;code&gt;Size&lt;/code&gt; are enum constants of type Size. &lt;/p&gt;

&lt;p&gt;As we can see that if we have more than one constants then they are separated by commas and the last one does not have any semicolon, although putting one at the end does not affect anything but it's mandatory when we use constructor and instance variables.&lt;/p&gt;

&lt;p&gt;So, how do we access them? Since all constants are &lt;code&gt;implicitly public static final&lt;/code&gt;, we can use the enum type - Size to access it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Size&lt;/span&gt; &lt;span class="n"&gt;small&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;SMALL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;Size&lt;/span&gt; &lt;span class="n"&gt;extraSmall&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;small&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extraSmall&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;will output -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="no"&gt;SMALL&lt;/span&gt;
&lt;span class="no"&gt;EXTRA_SMALL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;respectively to the console.&lt;/p&gt;

&lt;p&gt;Wait! Hold on, &lt;code&gt;Size.EXTRA_SMALL&lt;/code&gt; is going to need more space in our clothes, more ink means more cost. So, why not &lt;code&gt;symbolize&lt;/code&gt; them to reduce all the overhead. To do that we are slightly going to refactor our enum - Size and that’s when we are going to use a contractor and an instance variable(s).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="no"&gt;SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"S"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;          &lt;span class="c1"&gt;// 0&lt;/span&gt;
   &lt;span class="no"&gt;MEDIUM&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"M"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;         &lt;span class="c1"&gt;// 1&lt;/span&gt;
   &lt;span class="no"&gt;LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"L"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;          &lt;span class="c1"&gt;// 2&lt;/span&gt;

   &lt;span class="no"&gt;EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XS"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;// 3&lt;/span&gt;
   &lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXS"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;      &lt;span class="c1"&gt;// 4&lt;/span&gt;

   &lt;span class="no"&gt;EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XL"&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;// 5&lt;/span&gt;
   &lt;span class="no"&gt;EXTRA_EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXL"&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// 6&lt;/span&gt;

   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

   &lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
   &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
   &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Things to notice - a &lt;code&gt;final instance variable ‘value’&lt;/code&gt;, an overloaded constructor with &lt;code&gt;implicit private access modifier&lt;/code&gt;. &lt;code&gt;Public and protected are NOT allowed as they would allow you to instantiate&lt;/code&gt;. And finally, a &lt;code&gt;getter&lt;/code&gt; method to get the value of an enum constant.&lt;/p&gt;

&lt;p&gt;Now, thanks to the instance variable, constructor, and getter method we can reduce our cost and print something like this -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;Size&lt;/span&gt; &lt;span class="n"&gt;extraSmall&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;span class="nc"&gt;Size&lt;/span&gt; &lt;span class="n"&gt;extraExtraLarge&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;EXTRA_EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extraSmall&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="n"&gt;extraExtraLarge&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;will output -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="no"&gt;XS&lt;/span&gt;
&lt;span class="no"&gt;XXL&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;respectively to the console. &lt;/p&gt;

&lt;p&gt;A value can also be directly accessed/passed to others like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MEDIUM&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt;  &lt;span class="c1"&gt;// M&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now, what if your company decides that not only we are going to display the &lt;code&gt;letters/symbol&lt;/code&gt; of a Size, for customer convenience we will display the size in &lt;code&gt;inches&lt;/code&gt; next to the Size letter/symbol. Well, no worries we won’t have to drastically change or create another enum for size. We can do so like this -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="no"&gt;SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"S"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;          &lt;span class="c1"&gt;// 0&lt;/span&gt;
   &lt;span class="no"&gt;MEDIUM&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"M"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;         &lt;span class="c1"&gt;// 1&lt;/span&gt;
   &lt;span class="no"&gt;LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"L"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;          &lt;span class="c1"&gt;// 2&lt;/span&gt;

   &lt;span class="no"&gt;EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XS"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;// 3&lt;/span&gt;
   &lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXS"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;      &lt;span class="c1"&gt;// 4&lt;/span&gt;

   &lt;span class="no"&gt;EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XL"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;// 5&lt;/span&gt;
   &lt;span class="no"&gt;EXTRA_EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXL"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// 6&lt;/span&gt;

   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="kd"&gt;private&lt;/span&gt; &lt;span class="kd"&gt;final&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;inches&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;

   &lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="n"&gt;inches&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
   &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;value&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
       &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;inches&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;inches&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
   &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;getInches&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
   &lt;span class="o"&gt;{&lt;/span&gt;
       &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;inches&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
   &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now a Size enum instance has 2 attributes called value and inches.&lt;/p&gt;

&lt;h3&gt;
  
  
  What about &lt;code&gt;Ordinal&lt;/code&gt; number and other types of &lt;code&gt;methods&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;Let’s start with the ordinal number. As mentioned the ordinal number is nothing but the position of the constants. Let’s organize our Size constants from smallest to largest by inches.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="o"&gt;...&lt;/span&gt;
&lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXS"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;      &lt;span class="c1"&gt;// 0&lt;/span&gt;
&lt;span class="no"&gt;EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XS"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;// 1&lt;/span&gt;
&lt;span class="no"&gt;SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"S"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;          &lt;span class="c1"&gt;// 2&lt;/span&gt;
&lt;span class="no"&gt;MEDIUM&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"M"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;         &lt;span class="c1"&gt;// 3&lt;/span&gt;
&lt;span class="no"&gt;LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"L"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;          &lt;span class="c1"&gt;// 4&lt;/span&gt;
&lt;span class="no"&gt;EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XL"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;),&lt;/span&gt;            &lt;span class="c1"&gt;// 5&lt;/span&gt;
&lt;span class="no"&gt;EXTRA_EXTRA_LARGE&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXL"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt;       &lt;span class="c1"&gt;// 6&lt;/span&gt;
&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Everything else is the same. To get the ordinal number/index number of an enum constant Size -&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;MEDIUM&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;ordinal&lt;/span&gt;&lt;span class="o"&gt;());&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Will print &lt;code&gt;3&lt;/code&gt; to the console as &lt;code&gt;MEDIUM&lt;/code&gt; in the &lt;code&gt;4&lt;/code&gt; positions.&lt;br&gt;
The &lt;code&gt;ordinal()&lt;/code&gt; is a method available to &lt;code&gt;Size instance&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;There are 2 important methods available to the enum type Size along with others. They are called &lt;code&gt;valueOf(string)&lt;/code&gt; and &lt;code&gt;values()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;values()&lt;/code&gt; return an array of enum type ex. Size and since it returns an array we can index it or iterate it, as by our needs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;values&lt;/span&gt;&lt;span class="o"&gt;()[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;]);&lt;/span&gt; &lt;span class="c1"&gt;// EXTRA_EXTRA_SMALL&lt;/span&gt;

&lt;span class="nc"&gt;System&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;out&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;println&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Size&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;values&lt;/span&gt;&lt;span class="o"&gt;().&lt;/span&gt;&lt;span class="na"&gt;length&lt;/span&gt;&lt;span class="o"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// 7&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;Size.valueOf(“string”)&lt;/code&gt; will take a string argument and will return an instance of that enum type ex. &lt;code&gt;Size&lt;/code&gt; that has the same name as “string”, if not found by the name then &lt;code&gt;IllegalArgumentException&lt;/code&gt; will the thrown.&lt;/p&gt;

&lt;p&gt;More rarely, an enum type can also have &lt;code&gt;abstract methods&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;enum&lt;/span&gt; &lt;span class="nc"&gt;Size&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
   &lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"XXS"&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="o"&gt;){&lt;/span&gt;
       &lt;span class="nd"&gt;@Override&lt;/span&gt;
       &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;formatMyWay&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
       &lt;span class="o"&gt;{&lt;/span&gt;
           &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getValue&lt;/span&gt;&lt;span class="o"&gt;()+&lt;/span&gt;&lt;span class="s"&gt;" - "&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="no"&gt;EXTRA_EXTRA_SMALL&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;getInches&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="s"&gt;"\""&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
       &lt;span class="o"&gt;}&lt;/span&gt;
   &lt;span class="o"&gt;};&lt;/span&gt;

   &lt;span class="kd"&gt;public&lt;/span&gt; &lt;span class="kd"&gt;abstract&lt;/span&gt; &lt;span class="nc"&gt;String&lt;/span&gt; &lt;span class="nf"&gt;formatMyWay&lt;/span&gt;&lt;span class="o"&gt;();&lt;/span&gt;

   &lt;span class="c1"&gt;// everything else is the same as before&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Well, that’s all about enum from my end. I hope this was helpful and if I missed something please feel free to collaborate. Happy coding!&lt;/p&gt;

&lt;h2&gt;
  
  
  References:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.oracle.com/javase/tutorial/java/javaOO/enum.html"&gt;JavaDoc&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.oracle.com/javase/7/docs/api/java/lang/Enum.html"&gt;Oracle Java Tutorial&lt;/a&gt;&lt;/p&gt;

</description>
      <category>java</category>
      <category>enum</category>
      <category>learning</category>
      <category>details</category>
    </item>
  </channel>
</rss>
