(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