最近在写一些业务处理,实现对项目中通过模型计算产生的数据进行分类时,由于数据的类型都已经固定,突然想到enum这种数据类型,于是进行尝试,发现enum的使用让代码可读性、规范性大大提升,而且代码也显得更加优雅。
enum是jdk1.5中引入的新特性,存放在java.lang包中。
其具体详细的介绍可以查看我转载的《java enum(枚举)使用详解+总结(转载)》
原始地址为:http://www.cnblogs.com/hyl8218/p/5088287.html
下面是我在项目中使用enum类型的具体情境:
1、故事:
先需要将一个List中的所有内容按照标识变量分为确定数量的类型,并装入各个子类型List中。
总的List:List<ghyztpg> totalManagerPSList (不要吐槽此时的模型类命名,由于需要做特殊映射定义这么不规范的名字。。)
标识变量:.VoClass.getAnalyseType()
所有子类型的列表集中到一个类中:PublicServiceSubClass
2、实现:
1)子类型list集合PublicServiceSubClass:
public classPublicServiceSubClass {
//医疗卫生设施
ListmedicalHygineList=newArrayList<>();
//文化娱乐设施
ListcultureEntertainmentList=newArrayList<>();
//体育设施
ListPEList=newArrayList<>();
//社会福利与保障设施
ListsocialwelfareList=newArrayList<>();
//行政管理与社区服务
ListadministrativeList=newArrayList<>();
//社区商业及其它服务设施
ListcommunicateBusinessList=newArrayList<>();
//市政公用设施
ListmunicipalList=newArrayList<>();
//社区绿地与避难疏散设施
ListcommunityGreenSpaceList=newArrayList<>();
...getter,setter方法省略
}
2)模型类ghyztpg:
public class ghyztpg {
intid;
/**********************公服配置属性*****************************/
//类别,例如医疗卫生设施
StringitemType;
StringitemName;
//规划调整前的配置数量
StringstatusNum;
//规划调整前的用地面积
StringstatusLandArea;
//规划调整前的建筑面积
StringstatusBuildArea;
//规划调整后的配置数量
StringadjustNum;
//规划调整后的用地面积
StringadjustLandArea;
//规划调整后的建筑面积
StringadjustBuildArea;
//配置标准数量
StringstandardNum;
//配置标准用地面积的上下限
StringstandardLandArea;
//配置标准建筑面积的上下限
StringstandardBuildArea;
//预警结果,1代表通过,0代表不通过
StringcompareValue;
/********************用地统计属性*******************************/
//统计单元的名称,如一农
StringstatsRegionName;
//指标名称
StringindexName;
//规划总量值
StringplanTotal;
//调整规模值
StringadjustTotal;
//差值
StringdValue;
..省略getter,setter
}
3)enum定义与内置业务处理方法(往子类型数组中插入值)
enum TYPES{
医疗卫生设施,文化娱乐设施,体育设施,社会福利与保障设施,行政管理与社区服务,社区商业及其它服务设施,市政公用设施,社区绿地与避难疏散设施;
public static voidgetType(TYPES type,PublicServiceSubClass publicServiceSubClass,ghyztpg vo){
switch(type){
case医疗卫生设施:
publicServiceSubClass.getMedicalHygineList().add(vo);
break;
case体育设施:
publicServiceSubClass.getPEList().add(vo);
break;
case市政公用设施:
publicServiceSubClass.getMunicipalList().add(vo);
break;
case文化娱乐设施:
publicServiceSubClass.getCultureEntertainmentList().add(vo);
break;
case社会福利与保障设施:
publicServiceSubClass.getSocialwelfareList().add(vo);
break;
case社区商业及其它服务设施:
publicServiceSubClass.getCommunicateBusinessList().add(vo);
break;
case社区绿地与避难疏散设施:
publicServiceSubClass.getCommunityGreenSpaceList().add(vo);
break;
case行政管理与社区服务:
publicServiceSubClass.getAdministrativeList().add(vo);
break;
}
}
}
该类型必须放在类的最前面否则报错。
4)enum使用
totalManagerPSList.forEach(vo->{
if(vo.getItemType().equals(TYPES.医疗卫生设施.toString()))
TYPES.getType(TYPES.医疗卫生设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.体育设施.toString()))
TYPES.getType(TYPES.体育设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.市政公用设施.toString()))
TYPES.getType(TYPES.市政公用设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.文化娱乐设施.toString()))
TYPES.getType(TYPES.文化娱乐设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.社会福利与保障设施.toString()))
TYPES.getType(TYPES.社会福利与保障设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.社区商业及其它服务设施.toString()))
TYPES.getType(TYPES.社区商业及其它服务设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.社区绿地与避难疏散设施.toString()))
TYPES.getType(TYPES.社区绿地与避难疏散设施,managementUnitPSClass,vo);
else if(vo.getItemType().equals(TYPES.行政管理与社区服务.toString()))
TYPES.getType(TYPES.行政管理与社区服务,managementUnitPSClass,vo);
elseSystem.out.print("未知的管理单元公服配置子类型!");
});
3、总结:
通过上述步骤就能完成数据结果的固定类型分类,相较于之前使用的直接声明list后分类,虽然内容可能更加复杂,但是代码的可读性更好且结构更分明。
本人还在编程思想学习的路上苦苦挣扎,喜欢记录下自己灵光一闪的一些尝试,渴求各路大神的意见指点!