java中枚举类的实际应用
知识点:在Java中,使用枚举类,当遇到实例类型有限的类时,并且数据库中用状态码代表一种含义时,如星期,性别,员工登陆某系统的状态等等,
可以考虑使用枚举类
本例子可以仿照,也可以使用自定义的类型处理器,处理枚举类型,使用方法参考另一篇博客:https://www.cnblogs.com/shuaifing/p/9330913.html
(1)枚举类
EmpsStatus.java一种状态码代码一种登录状态,如100代表用户已登录,其中getEmpStatusByCode,getEmpEnum都是根据用户的状态码获取对应的枚举类,实际中可以调用作用一致
/*
*
* 保存数据库100,200,状态吗,不是默认的0,或者枚举名
* */
public enum EmpsStatus {
LOGIN(100,"用户登录"),LOGINOUT(200,"用户退出"),REMOVE(300,"用户不存在");
private Integer code;
private String msg;
private EmpsStatus(Integer code,String msg) {
this.code=code;
this.msg=msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
//按照状态码返回枚举对象
public static EmpsStatus getEmpStatusByCode(Integer code){
switch (code) {
case 100:
return LOGIN;
case 200:
return LOGINOUT;
case 300:
return REMOVE;
default:
return LOGINOUT;
}
}
public static EmpsStatus getEmpEnum(int code) { //使用int类型
for(EmpsStatus sourceEnum: EmpsStatus.values()) {
if(sourceEnum.getCode() == code) return sourceEnum;
}
return null;
}
}
(2)实体类
Employee.java
public class Employee {
private Integer id;
private String lastName;
private String email;
private String gender;
//员工状态
private EmpsStatus empStatus=EmpsStatus.LOGINOUT;
private String empstsus;//改字段为员工状态码字段,与数据中的字段对应
public Employee() {
// TODO Auto-generated constructor stub
}
public Employee(String lastName, String email, String gender) {
super();
this.lastName = lastName;
this.email = email;
this.gender = gender;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public EmpsStatus getEmpsStatus() {
return empStatus;
}
public void setEmpsStatus(EmpsStatus empsStatus) {
this.empStatus = empsStatus;
}
public String getEmpstsus() {
return empstsus;
}
public void setEmpstsus(String empstsus) {
this.empstsus = empstsus;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email="
+ email + ", gender=" + gender +", empstsus=" + empstsus+ "]";
}
}
(3)测试方法调用
@Test
public void testEnumStaus()throws IOException{
SqlSessionFactory sqlSessionFactory= getSqlSessionFactory();
SqlSession openSession= sqlSessionFactory.openSession();
try{
EmployeeMapper mapper=openSession.getMapper(EmployeeMapper.class);
List<Employee> emplist= mapper.getEmps();
Employee emp=new Employee();
//利用枚举类,对员工登录状态类型字段进行翻译
EmpsStatus empsStatus=null;
for(int i=0;i<emplist.size();i++){
emp=emplist.get(i);
empsStatus= empsStatus.getEmpEnum(Integer.parseInt(emp.getEmpstsus()));
System.out.println("code"+Integer.parseInt(emp.getEmpstsus()));
System.out.println("msg1"+empsStatus.getMsg());
if(empsStatus!=null) {
emp.setEmpstsus(empsStatus.getMsg());//数据库,查询emp对象后,根据员工状态字段调用getEmpEnum枚举类,方法,得到相应含义,再次赋值给emp对象的相应字段
System.out.println("msg2"+empsStatus.getMsg());
}
}
for (Employee employee : emplist) {
System.out.println(employee);
}
/*openSession.commit();*/
}finally{
openSession.close();
}
}
源码:https://github.com/shuaishuaihand/enumdemo.git