Enum 可以用于存储常量列表,也可以作单例SingleTon,其中,单例应用更是所有单例实现中的最佳实践。以下是一个例子:
public class Enum01 {
public static void main(String[] args) {
basicTest();
// singleTon();
}
public static void basicTest() {
Token token = Token.NAME;
// enum's method
System.out.println("~~~basicTest~~~");
System.out.println(token.name());
// 只是用作常量的话,用name()就好
System.out.println(Token.NAME.name());
System.out.println(Token.NAME.compareTo(Token.NAME1));
System.out.println(Token.values()[0].name);
System.out.println(Token.valueOf("NAME1").name);
// enum in switch
switch (token) {
case NAME:
System.out.println("NAME");
break;
case NAME1:
System.out.println("NAME1");
break;
default:
System.out.println("default");
break;
}
System.out.println("~~~basicTest end~~~");
}
public static void singleTon() {
// same instance
Token token = Token.COUNTER;
Token token1 = Token.COUNTER;
if (token == token1) {
System.out.println("same object");
}
token.addCounter(1);
token1.addCounter(1);
System.out.println(token1.counter);
}
// 枚举类
private enum Token {
// 本质是类静态常量(public static final), 所以大写
NAME, NAME1("name1"), COUNTER(1);
private String name;
private int counter = 0;
// constructor(private, initialize once)
private Token() {
this.name = "init_name";
System.out.println("Singleton instance created.");
}
private Token(String name) {
this.name = name;
System.out.println("Singleton2 instance created.");
}
private Token(int counter) {
this.counter += counter;
System.out.println(this.counter);
}
// singleton一般有对应的方法而不只是定义常量
private void addCounter(int counter) {
this.counter += counter;
System.out.println(this.counter);
}
}
}