浅列JavaEnum

enum Province{ ZHEJIANG,SHANGHAI,JIANGSU }


Province是一个最简单枚举类,它内部有三个指向它实例包括江浙沪
枚举类的特点就是它的所有实例都是在它内部生长的,并都是由编译器创建生成的

Province.values() //返回Province所有实例的数组[ZHEJIANG,SHANGHAI,JIANGSU]
其实Enum类并不存在values方法,是由编译器添加的静态方法,还有一种获得实例数组
的方法就是 Province.ZHEJIANG.getClass().getEnumConstants()

Province.SHANGHAI.ordinal() //返回SHANGHAI的序列下标 1
Province.values()[0].name() //返回ZHENGJIANG的显示名称'ZHEJIANG'


enum Province{
ZHEJIANG("浙江"),
SHANGHAI("上海"),
JIANGSU ("江苏");

private String name;

public String getDesc(){
return "地址是"+name;
}

public Province(String name){
this.name = name;
}
}

自定义枚举构造方法,在创建江浙沪3个实例时都传递了各自的中文名称作为构造参数
Province.values()[0].getDesc() //自定义方法 返回地址是浙江
注意要自定义属性或方法时必须在枚举最后一个实例后面加上';'号

为什么枚举不能继承其他类?
因为所有枚举都默认继承Enum类了,java指定一个类最多只能继承一个父类,所以枚举类
无法再显示继承其他类了,当然枚举可以实现接口.

interface Province{
enum Huadong implements Province{
ZHEJIANG,SHANGHAI;
},
enum Huanan implements Province{
GUANGDONG,JIANGXI;
},
enum Huabei implements Province{
BEIJING,TIANJING;
}
}


通过枚举实现接口的方式,将省分为华东华南华北三类,Province p = Province.Huangdong
.ZHEJIANG可以将ZHEJIANG向上转型为Province类型

Enum虽然可以很好的管理数据,但是他不能手动新增或删除实例,算不上一个容器
说到枚举特有的容器,看看下面的代码创建一个直辖市的EnumSet保存数据
EnumSet<Province> zhixiashi = EnumSet.noneOf(Province.class);
zhixiashi.addAll(EnumSet.of(Province.BEIJING,Province.TIANJING));


再看一个EnumMap的例子
EnumMap<String[]> citys = new EnumMap<String[]>(Province.class);
citys.put(Province.Huadong.ZHENGJIAN,{'杭州','宁波','绍兴'})

EnumMap的特点就是它的key都必须是枚举类型的


注:以上代码均为手敲伪代码,不保证能编译通过
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值