Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the loginizer domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/despjszs/public_html/wp-includes/functions.php on line 6114
Enums – Despina Papatheodorou

Enums


Sexy, Chic , Powerful

Sexy and Chic because they produce elegant code by constraining the choices of what you can pass.
Powerful, because by limit your choices , actually increase the code effectiveness (it means the code you write today will work if reused 10 years later )

But , first things first…

What is an Enum type? 
They are classes that export one instance for each enumeration constant (think a public static final field ), or consider it as a generalization of singletons ( singleton as an single element enum)

What they Provide?:

  • Compile-time Type Safety:
    Prevent typos and invalid parameters passing in compile-time checking and prevent errors like passing Null values that will fail in Run-time
  • Make testing easier
    If enum is passed as parameter in a method, testing is easier for edge conditions, for example no need to write unit tests for invalid input
  • They are Self-documented
    The set of choices for a parameter is finite and self-describing, so no need to write comments or documentation
  • Can have methods and other fields 
    In Java doc , enum is defined as:

public abstract class Enum<E extends Enum<E>>

extends Object

implements Comparable<E>, Serializable

So you can add methods, fields and implement any behavior you want. **PS** An Enum cannot extend other Enum, all of them extend java.lang.Enum class and Java doesn’t supports multiple inheritance !

When to use them?

  • When you need a set of constants that are known at compile time(e.g transaction statuses, planets , days of week , lipstick color codes )
  • According to Bloch , a single-element enum type is the best way to implement a singleton.
  • Use them to implement the Strategy design pattern
    In this case each enum or many enums can share a behavior.
    Let’s see the below example, the strategy is the ConnectType , enums INSTAGRAM, LINKEDIN, TINDER share the same way to connect, sending a PM, but PHONE and SKYPE follow a different approach.
public enum Networking {

    INSTAGRAM,LINKEDIN, TINDER,
    PHONE(ConnectType.LANDLINE), SKYPE(ConnectType.VoIP);

    private final ConnectType connectType;
    Networking() { this.connectType= ConnectType.TEXT; }
    Networking(ConnectType connectType) {
        this.connectType=connectType;
    }

    void connect(){
        connectType.connect();
    }

    private enum ConnectType {

        TEXT {
            @Override
            void connect() {
                System.out.print("Send a PM ..");
            }
        },

        VoIP {
            @Override
            void connect() {
                System.out.print(" Do a video call! ");
            }
        },

        LANDLINE {
            @Override
            void connect() {
                System.out.print("Classic and Vintage! ");
            }
        };

        abstract void connect();
    }
}