浅列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都必须是枚举类型的


注:以上代码均为手敲伪代码,不保证能编译通过

你可能感兴趣的:(java enum)