java enumerations

Complete

Concept

Enumerations

  • fixed set of values considered as a data type
  • prevents invalid values to be assigned to it
java
public enum Day {
	SUNDAY, MONDAY, TUESDAY, WEDNESDAY,
	THURSDAY, FRIDAY, SATURDAY
}

Attributes

  • constants are instances
java
enum Status {
	SUCCESS(200), // instantiation using the constructor, Status object with code = 200
	ERROR(500);

	private final int code;

	Status(int code) {
		this.code = code;
	}
}

Subclasses

java
enum Op {
    ADD { int apply(int a, int b) { return a + b; } },
    SUB { int apply(int a, int b) { return a - b; } };

    abstract int apply(int a, int b);
}

enum is a class (possibly abstract), enum constants are instances and constants with bodies are anonymous subclasses

Lookup method

  • factory method to instantiate an enum from a primitive type
java
enum Status {
    SUCCESS(200),
    ERROR(500);

    private final int code;

    Status(int code) {
        this.code = code;
    }

    public static Status fromCode(int code) {
        for (Status s : values()) {
            if (s.code == code) {
                return s;
            }
        }
        // if not a valid enum type
        throw new IllegalArgumentException("Unknown code: " + code);
    }
}

Application

Mixing “bodied” constants

java
enum HttpMethod {
    GET,
    POST,
    PUT,
    DELETE {
        @Override
        boolean hasRequestBody() {
            return false;
        }
    };

    boolean hasRequestBody() {
        return true; // default
    }
}

Abstract method

  • requires constants to all be anonymous classes
java
enum Status {
    OK { void log() {} },
    ERROR; // compile-time error, log is not implemented

    abstract void log();
}