枚举类也是一个类,既然是类,那么就会有构造器,对象,属性,方法
有的时候一个类的对象是有限且固定的,这种情况下我们使用枚举类就比较方便
既然是用于类的对象是有限且固定的,我们自然可以使用私有化构造器的方式,在内部创建好静态对象,一样能达到类的对象是有限且固定的 枚举类岂不是很鸡肋? 难道只是为了使用方便? 但是,我们还要考虑到java中的反射,反射是可以拿到私有的构造器,并且通过这个私有的构造器创建对象 普通类: 在被反射以后,可以创建多个对象,除了我们在内存创建的静态对象,那么此时类的对象就不是有限且固定的 枚举类: 内部实现的机制,不再能够被反射,反射就给你报异常
既然是类就从类的构造器,对象,属性,方法来使用
//定义一个城市枚举类
public enum City {
//枚举对象
BeiJing(1000,"beifang"),
GuangZhou(1111,"nanfang");
//类的构造器
City(int code,String location) {
this.code = code;
this.location = location;
}
//这两个就是类的属性 code城市编码, location地点 这里只使用南方北方表示
private int code;
private String location;
//下面是我们类的方法
public int getCode() {
return code;
};
public String getlocation() {
return location;
};
}
枚举对象,要以`,`逗号分隔开,连续写对象,直到最后一个以`;`结束 直接以对象名字加(参数列表)的方式构建,同普通类的new对象不同 参数列表: 同普通类一样,参数列表能写什么完全依赖于你定义了什么构造方法
同普通类一样,但是构造器都是私有化的
1. 不写构造方法就是默认生成一个无参构造方法 构造对象时括号内什么都不能写
public enum City {
//枚举对象
BeiJing(),
GuangZhou();
//这两个就是类的属性 code城市编码, location地点 这里只使用南方北方表示
private int code;
private String location;
}
2. 写有参构造以后就不会再默认生成无参
这时再创建对象时不穿参数就报错了
3. 有参数无参数都写
BeiJing(1000,"beifang"),
GuangZhou(1111,"nanfang"),
Shanghai(),
DaLian(7777);
//类的构造器
City() {
}
City(int code,String location) {
this.code = code;
this.location = location;
}
City(int code) {
this.code = code;
}
属性可以是 public private prodected 访问权限也和普通类一致
同普通类一样 可以随意定访问权限 也可以随意定义方法的实现 //下面是我们类的方法 public int getCode() { return code; }; public String getlocation() { return location; }; public String getnum() { return code+location; }
一般在项目中,多使用在返回状态码,返回信息中,约定好哪些场景使用哪个枚举对象,并且将属性私有化,对外只提供get方法
例: 在请求成功以后就是返回枚举对象SUCCESS,这个SUCCESS对象的信息也不允许修改
当然上述也不是绝对的,只是举出一个场景
public enum R {
SUCCESS(200,"成功"),
ERROR(500,"失败");
private int code;
private String msg;
BizCodeEnume(int code,String msg){
this.code = code;
this.msg = msg;
}
public int getCode() {
return code;
}
public String getMsg() {
return msg;
}
}