1.Int枚举常量
public class mytest {
public static final int num_one = 1;
public static final int num_two = 2;
public static final int num_three = 3;
public static final int char_A = 1;
public static final int char_B = 2;
public static final int char_C = 3;
}
这种方法叫做int枚举模式,缺点:
1.类型安全性不能保证,num和char两种不同的东西,两者可以相互传参,互相对比,不符合我们的常识。
2.要打印出来值的之后,得到的就只有一个数字,没什么作用。
3.想要遍历同一组的常量,或者求出这一组常量的数目,没什么好的方法。
4.如果是String枚举模式,把字符串硬编码到客户端代码中,一旦出现书写错误,将难以发现。
2.enum枚举常量
public enum Number {
one(1),two(2),three(3);
private final int i;
private Number(int k) {
i=k;
}
@Override
public String toString() {
return "我的值是" +i;
}
}
首先介绍一下枚举类的原理:
1.枚举就是通过公有的静态final域为每个枚举类型导出实例的类。如例子中的one,two,three;
2.它的访问器必须是private的,所以它是真正的final,也就是说它无法创建实例,无法扩展,所以说它是实例受控的。
枚举类的相比int枚举优点:
1.保证类型安全,传参必须保证类型一致,同时不同的枚举用“==”比较会编译错误。
2.可以重写toString方法,得到想要的字符串。
3.可以用枚举的values方法遍历所以枚举常量
上面的三点都是完善int枚举类型,还有它还提供和很多高级特性:
4.枚举类型允许添加任意的方法和域,由于它继承了Enum,所以它不支持继承,它只能实现接口。
5.它实现了Comparable和Seriazable,所以它支持比较和序列化。这也是它是单例模式的最佳选择之一的原因。
注意:由于枚举天生是不可变的,所以它的所有域都应该声明成final,为了封装型,最好声明成private。