Scala 定义复杂枚举
通常我们需要枚举参数不止两个,Scala提供的枚举类最多定义两个参数:id:Int与name:String。不能满足我们通常要求。
object BaseEntryEnum extends Enumeration {
type BaseEntryEnum = Value
//item_base类别
val ITEM_TYPE_PURCHASE_CENTER = Value(31, "采购中心")
val ITEM_TYPE_COMPANY = Value(32, "公司")
val ITEM_TYPE_OI_ITEM = Value(33, "OI项")
val ITEM_TYPE_STORE_ITEM = Value(40, "门店白名单")
val ITEM_TYPE_STORE_BLACKLIST = Value(41, "门店黑名单")
}
如下enumeratum包可以满足我们需求,可以定义任意参数。
引入如下包
"com.beachape" %% "enumeratum-argonaut" % "1.5.13"
定义复杂枚举:
package com.today.service.financetask.job.define import com.today.api.financetask.scala.enums.TReportTypeEnum
import com.today.service.financetask.job._
import enumeratum.EnumEntry
import org.quartz.Job sealed abstract class JobEnum(
/**
* ID
*/
val jobId: String,
/**
* job名称
*/
val jobName: String,
/**
* job定义类
*/
val jobClass : Class[_ <: Job],
/**
* 定时任务cron表达式
*/
val cron: String) extends EnumEntry /**
* 所有Job 枚举定义在此类, 不能重复
* jobId不能重复
* @author BarryWang create at 2018/5/12 10:45
* @version 0.0.1
*/
case object JobEnum extends enumeratum.Enum[JobEnum]{
val values = findValues
case object DAY_TIME_PROCESS extends JobEnum("DAY_TIME_PROCESS",
"日次处理定时任务", classOf[DayTimeProcessJob], "0 30 2 * * ?") case object RETIREMENT_SYNC_PROCESS extends JobEnum("RETIREMENT_SYNC_PROCESS",
"采购系统同步报废单据数据定时任务", classOf[RetirementSyncProcessJob], "0 0 1 * * ?") case object PURCHASE_ORDER_2_SYNC_PROCESS extends JobEnum("PURCHASE_ORDER_2_SYNC_PROCESS",
"采购系统同步PO2数据定时任务", classOf[PurchaseOrder2SyncProcessJob], "0 0 5 * * ?") case object SEND_EMAIL_PROCESS extends JobEnum("SEND_EMAIL_PROCESS",
"计划付款通知和已付款通知定时任务", classOf[SendEmailProcessJob], "0 0 18 * * ?") case object CLOSE_ACCOUNT_BASE_DATA_PROCESS extends JobEnum("CLOSE_ACCOUNT_BASE_DATA_PROCESS",
"关账基础数据同步定时任务", classOf[CloseAccountBaseDataSyncJob], "0 30 23 L * ?") case object INCOME_DETAIL_REPORT extends JobEnum(TReportTypeEnum.INCOMEDETAIL_REPORT.id.toString,
"每天生成营收明细报表定时任务", classOf[DailyGenIncomeDetailJob], "0 10 0 * * ?") case object CHECK_ACCOUNT_PROCESS extends JobEnum("CHECK_ACCOUNT_PROCESS",
"对账系统自动对账定时任务", classOf[CheckAccountJob], "0 0 13 * * ?") case object MEMBER_ACCOUNT_PROCESS extends JobEnum("MEMBER_ACCOUNT_PROCESS",
"会员自动对账定时任务", classOf[MemberAccountJob], "0 1 0 * * ?") case object EXPORT_REPORT_LONG_HISTORY_STATUS extends JobEnum("EXPORT_REPORT_STATUS_PROCESS",
"清除90天前的财务报表定时任务", classOf[ExportReportStatusProcessJob], "0 15 1 ? * *") case object DING_TALK_LOGS_IMPORT extends JobEnum("DING_TALK_LOGS_IMPORT",
"导入钉钉审批记录定时任务", classOf[DingTalkImportProcessLogsJob], "0 10 1 ? * *") case object DING_TALK_DETAIL_IMPORT extends JobEnum("DING_TALK_DETAIL_IMPORT",
"导入钉钉审核通过审批单详情定时任务", classOf[DingTalkImportProcessDetailJob], "0 20 1 ? * *") /**
* jobId与jobName映射关系
* @return
*/
def jobIdNameMap : Map[String, String]={
JobEnum.values.map(x=> Map(x.jobId -> x.jobName)).fold(Map())((i,j) => i++j)
} /**
* JobObject与JobEnum映射关系
* @return
*/
def jobObjectEnumMap = {
JobEnum.values.map(x=> Map(x.jobClass.getName -> x)).fold(Map())((i,j) => i++j)
} /**
* jobId与JobEnum映射关系
* @return
*/
def jobIdEnumMap = {
JobEnum.values.map(x=> Map(x.jobId -> x)).fold(Map())((i,j) => i++j)
} }
Scala 定义复杂枚举的更多相关文章
- Scala进阶之路-Scala中的枚举用法案例展示
Scala进阶之路-Scala中的枚举用法案例展示 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Scala中的枚举值和Java中的枚举值有点差别,不过使用起来也都差大同小异,我这 ...
- Scala学习笔记--枚举
枚举 scala不用关注枚举的特别语法,取而代之的是标准库中的类, scala.Enumeration 想要创建新的枚举,只需要拓展这个类的对象即可 object Color extends Enum ...
- scala.的Enumeration枚举示例(转)
简介 在scala中没有枚举类型,但在标准类库中提供了Enumeration类来产出枚举.扩展Enumeration类后,调用value方法类初始化枚举中的可能值. 内部类value实际上是一个抽象类 ...
- go常量的定义和枚举类型
const a,b int = 1,2 const a,b = 1,2 const ( a = "hello" b,c =3,4 ) 常量数值可作为各种类型使用 枚举类型的 ...
- 一个C++宏定义与枚举定义重复的编译错误
C++的开发效率低是众所周知的,原因比如有: 语言复杂度高 编译效率低 工具链不够完整高效(尤其是linux下) 另外一个恐怕是不少编译错误让人摸不着头脑,今天碰到一个,举个例子: #include ...
- hdu3118Arbiter (使用二分图的定义,枚举每个状态)
Arbiter Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Sub ...
- Quartz实现分布式可动态配置的定时任务
关键词: 1. 定时任务 2. 分布式 3. 可动态配置触发时间 一般通过Quartz实现定时任务很简单.如果实现分布式定时任务需要结合分布式框架选择master节点触发也可以实现.但我们有个实际需求 ...
- Objective-C枚举的几种定义方式与使用
假设我们需要表示网络连接状态,可以用下列枚举表示: enum CSConnectionState { CSConnectionStateDisconnected, CSConnectionStateC ...
- oc中的枚举定义
typedef NS_ENUM(类型,枚举名){ 枚举名+值名, 枚举名+值名,}; 该方法定义的枚举,OC会自动把其转换成合适当前版本的枚举.如果枚举值可合并的话 NS_E ...
随机推荐
- HTTP Error 502.5 - ANCM Out-Of-Process Asp.Net Core发布到IIS失败
问题概述 asp.net core网站发布到windows server 2012r2 IIS后,出现这个报错.dotnet xx.dll命令网站能够正常运行.说明不是程序问题. 经过一番折腾终于部署 ...
- JavaScript的闭包特性如何给循环中的对象添加事件(一)
初学者经常碰到的,即获取HTML元素集合,循环给元素添加事件.在事件响应函数中(event handler)获取对应的索引.但每次获取的都是最后一次循环的索引.原因是初学者并未理解JavaScript ...
- 博文与文档发布玩法:Github + MWeb + 语雀 + Cnbolgs
本文会说两个话题, 1,如何将 Github 上的文档(如:dotnet-campus/doraemon-pocket: 哆啦A梦的口袋 - 收集效率工具与站点)发布到语雀. 2,如何在本地使用 Ma ...
- 最全面的PS快捷键使用指南(图文演示)
每次做图的时候都会记错快捷键,很苦恼有木有!!!只能各处搜寻PS快捷键汇总起来,老板再也不会说我作图慢了....... 1.Ctrl+T:自由变形 该快捷键,主要对图层进行旋转.缩放等变形调整,同时可 ...
- jQuery 选择器有61种你都知道了多少
下面列举了61种jQuery 选择器 参考 选择器 语句 描述 * $("*") 选择所有元素 #id $("#lastname") id=“lastname” ...
- weblogic 安全漏洞问题解决
1 weblogic控制台地址暴露 ² 整改方法: 禁用weblogic控制台.在weblogic域(sguap-domain和base-domain)的config下的config.xml中 &l ...
- maven 学习---部署基于Maven的war文件到Tomcat
在本教程中,我们将学习如何使用Maven的Tomcat插件打包并部署一个WAR文件到Tomcat(Tomcat的6和7. 要用到工具: Maven 3 Tomcat 6.0.37 Tomcat 7.0 ...
- CentOs 7.*中配置安装phpMyAdmin的完整步骤记录
phpMyAdmin是一个以PHP为基础,以Web-Base方式架构在网站主机上的MySQL的资料库管理工具.下面这篇文章主要给大家介绍了关于CentOs 7.*中配置安装phpMyAdmin的相关资 ...
- Rust中的闭包
这个功能有点高级, 暂时理解不完全, 先把代码练正确吧. use std::thread; use std::time::Duration; struct Cacher<T> where ...
- 树莓派搭建SVN服务器
1.安装SVN服务器 sudo apt-get install subversion -y 2.创建仓库 mkdir /home/pi/svnRepository svnadmin create /h ...