Java枚举类型Enum的用法

(1)定义
/*
 * 最基本的enum
 */
enum NumericEnums {
    ONE, TWO, THREE, FOUR, FIVE,
}

/*
 * 构造函数和自定义方法
 */
enum ConstructableEnums {
    ABC(10, "abc"), DEF(20, "def"), GHI(30, "ghi"), JKL(40, "jkl");
    final int num;
    final String name;

    //构造函数默认是private,也只能是private。其他的话会编译错误!
    ConstructableEnums(int _num, String _name) {
        this.num = _num;
        this.name = _name;
    }

    String getContent() {
        return String.format("num=[%d], name=[%s]", num, name);
    }
}

/*
 * 抽象方法和方法override
 */
enum EnumsWithMethod {
    MORNING("Good Morning") {
        @Override
        String hello(String yourName) {
            return greeting + ", " + yourName + ". zzz...";
        }
    },
    AFTERNOON("Good Afternoon") {
        @Override
        String hello(String yourName) {
            return greeting + ", " + yourName + ". tea or coffee ?";
        }

        @Override
        String getGreeting() {
            return super.getGreeting() + ", but sleepy...";
        }
    },
    EVENING("Good Evening") {
        @Override
        String hello(String yourName) {
            return greeting + ", " + yourName + ". sleep, sleep.";
        }
    };
    final String greeting;

    EnumsWithMethod(String _greeting) {
        this.greeting = _greeting;
    }

    abstract String hello(String yourName);

    String getGreeting() {
        return greeting;
    }
}

/*
 * 实现接口
 */
interface HelloInterface {
    public String sayHello(String yourName);
}

enum EnumWithInterface implements HelloInterface {
    ME_THEN_YOU("foo") {
        public String sayHello(String yourName) {
            return String.format("I'm %s, you're %s.", myName, yourName);
        }
    },
    YOU_THEN_ME("bar") {
        public String sayHello(String yourName) {
            return String.format("You're %s, I'm %s.", yourName, myName);
        }
    };
    final String myName;

    EnumWithInterface(String _myName) {
        myName = _myName;
    }
}


(2)使用
// ----------------------------------------
System.out.println("printing NumericEnums.values():");
for (NumericEnums e : NumericEnums.values()) {
    System.out.print(e.toString() + "\t");
}//ONE	TWO	THREE	FOUR	FIVE
System.out.println();

NumericEnums o = NumericEnums.ONE;
if(o == NumericEnums.ONE){
  System.out.println("enum in java can be compared using ==");
}

System.out.println(NumericEnums.valueOf("ONE").equals(NumericEnums.ONE));//true
try {
	NumericEnums.valueOf("one");
} catch (IllegalArgumentException e) {
	System.out.println("one is not exist!");
}

NumericEnums one = NumericEnums.ONE;
switch(one) {
case ONE:
	System.out.println("ONE");
	break;
}

// ----------------------------------------
System.out.println("printing ConstructableEnums.values():");
for (ConstructableEnums e : ConstructableEnums.values()) {
	System.out.print(e.toString() + "\t");
}//ABC	DEF	GHI	JKL
System.out.println();
System.out.println(ConstructableEnums.valueOf("DEF").equals(ConstructableEnums.DEF));//true

System.out.println(ConstructableEnums.DEF.getContent());//num=[20], name=[def]

// ----------------------------------------
System.out.println(EnumsWithMethod.MORNING.hello("foo")); //Good Morning, foo. zzz...
System.out.println(EnumsWithMethod.AFTERNOON.hello("bar"));//Good Afternoon, bar. tea or coffee ?
System.out.println(EnumsWithMethod.EVENING.hello("baz"));//Good Evening, baz. sleep, sleep.
System.out.println(EnumsWithMethod.MORNING.getGreeting());//Good Morning
System.out.println(EnumsWithMethod.AFTERNOON.getGreeting());//Good Afternoon, but sleepy...
System.out.println(EnumsWithMethod.EVENING.getGreeting());//Good Evening

// ----------------------------------------
System.out.println(EnumWithInterface.ME_THEN_YOU.sayHello("abc"));//I'm foo, you're abc.
System.out.println(EnumWithInterface.YOU_THEN_ME.sayHello("def"));//You're def, I'm bar.

// EnumMap----------------------------------------
Map<NumericEnums, String> numerics = new EnumMap<NumericEnums, String>(NumericEnums.class);
numerics.put(NumericEnums.ONE, "one");
numerics.put(NumericEnums.TWO, "two");
numerics.put(NumericEnums.THREE, "three");
numerics.put(NumericEnums.FOUR, "four");
numerics.put(NumericEnums.FIVE, "five");

System.out.println(numerics.get(NumericEnums.FOUR));//four

// EnumSet----------------------------------------
Set<NumericEnums> s1 = EnumSet.of(NumericEnums.TWO, NumericEnums.THREE);
System.out.println(s1.contains(NumericEnums.TWO));//true
System.out.println(s1.contains(NumericEnums.FOUR));//false

Set<NumericEnums> s2 = EnumSet.noneOf(NumericEnums.class);
System.out.println(s2.size());//0

Set<NumericEnums> s3 = EnumSet.range(NumericEnums.TWO, NumericEnums.FOUR);
System.out.println(s3.contains(NumericEnums.ONE));//false
System.out.println(s3.contains(NumericEnums.TWO));//true
System.out.println(s3.contains(NumericEnums.THREE));//true
System.out.println(s3.contains(NumericEnums.FOUR));//true
System.out.println(s3.contains(NumericEnums.FIVE));//false

// int->Enum
System.out.println(NumericEnums.values()[0].equals(NumericEnums.ONE));//true

// String->Enum
System.out.println(NumericEnums.valueOf("ONE").equals(NumericEnums.ONE));//true

// Enum->int----------------------------------------
System.out.println(NumericEnums.ONE.ordinal());//0
System.out.println(NumericEnums.TWO.ordinal());//1
System.out.println(NumericEnums.THREE.ordinal());//2
System.out.println(NumericEnums.FOUR.ordinal());//3
System.out.println(NumericEnums.FIVE.ordinal());//4

// Enum->String----------------------------------------
System.out.println(NumericEnums.ONE.name());//ONE
System.out.println(NumericEnums.TWO.name());//TWO
System.out.println(NumericEnums.THREE.name());//THREE
System.out.println(NumericEnums.FOUR.name());//FOUR
System.out.println(NumericEnums.FIVE.name());//FIVE

System.out.println(NumericEnums.ONE.toString());//ONE
System.out.println(NumericEnums.TWO.toString());//TWO
System.out.println(NumericEnums.THREE.toString());//THREE
System.out.println(NumericEnums.FOUR.toString());//FOUR
System.out.println(NumericEnums.FIVE.toString());//FIVE

你可能感兴趣的:(java)