Skip to content

Latest commit

 

History

History
194 lines (142 loc) · 2.78 KB

1.8 - enums.md

File metadata and controls

194 lines (142 loc) · 2.78 KB

theme: Plain Jane, 3 autoscale: true

Enums

  • can be empty
package com.freniche.ocp8;

public class Main {
    public static void main(String[] args) {
    }
}

enum Months {
}

Enums can have a list of "values"

  • JAN is an object of class Months
enum Months {
    JAN, FEB, MAR
}

System.out.println(JAN instanceof Months);

for (Months e: Months.values()) {
    System.out.println(e.toString());
}

// true, JAN, FEB, MAR

Enum: a class that contains a certain number of objects

enum Months {
    JAN(31), FEB(28), MAR(31);  // semicolon important here!

    int numDays;
    private Months(int numDays) {
        this.numDays = numDays;
    }

    @Override
    public String toString() {
        return super.toString().toLowerCase();
    }
}

// can print number of days

for (Months e: Months.values()) {
    System.out.println(e.toString() + " " + e.numDays);
}

Create an enum from a String

Months m = Months.valueOf("JAN"); // OK

Months m = Months.valueOf("JAn"); // java.lang.IllegalArgumentException: No enum constant 

Can't extend an Enum

enum Months extends Object {    // fails
    JAN(31), FEB(28), MAR(31);

    int numDays;
    private Months(int numDays) {
        this.numDays = numDays;
    }

    @Override
    public String toString() {
        return super.toString().toLowerCase();
    }
}

But... interfaces!

@FunctionalInterface
interface Printable {
    void print();
}

enum Months implements Printable {
    JAN(31), FEB(28), MAR(31);

    int numDays;
    private Months(int numDays) {
        this.numDays = numDays;
    }

    @Override
    public String toString() {
        return super.toString().toLowerCase();
    }

    @Override
    public void print() {
        
    }
}

Methods in enums

enum Months  {
    JAN(31) {   // method override for JAN
        @Override
        public void print() {
            super.print();
        }
    }, 
    FEB(28), 
    MAR(31) ;

    int numDays;
    private Months(int numDays) {
        this.numDays = numDays;
    }

    @Override
    public String toString() {
        return super.toString().toLowerCase();
    }

    public void print() {   // default implementation

    }
}

Methods in Enums 2

enum Months  {
    JAN(31) {
        @Override
        public void print() {
        }
    },
    FEB(28) {
        @Override
        public void print() {
        }
    },
    MAR(31) {
        @Override
        public void print() {
        }
    };

    int numDays;
    private Months(int numDays) {
        this.numDays = numDays;
    }

    @Override
    public String toString() {
        return super.toString().toLowerCase();
    }

    public abstract void print();   // abstract
}