Effective Java之用enum代替int常量(三十)

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。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值