Scala 定义复杂枚举

通常我们需要枚举参数不止两个,Scala提供的枚举类最多定义两个参数:id:Int与name:String。不能满足我们通常要求。

1 object BaseEntryEnum extends Enumeration {
2   type BaseEntryEnum = Value
3   //item_base类别
4   val ITEM_TYPE_PURCHASE_CENTER = Value(31, "采购中心")
5   val ITEM_TYPE_COMPANY = Value(32, "公司")
6   val ITEM_TYPE_OI_ITEM = Value(33, "OI项")
7   val ITEM_TYPE_STORE_ITEM = Value(40, "门店白名单")
8   val ITEM_TYPE_STORE_BLACKLIST = Value(41, "门店黑名单")
9 }

如下enumeratum包可以满足我们需求,可以定义任意参数。

引入如下包

"com.beachape" %% "enumeratum-argonaut" % "1.5.13"

定义复杂枚举:

 1 package com.today.service.financetask.job.define
 2
 3 import com.today.api.financetask.scala.enums.TReportTypeEnum
 4 import com.today.service.financetask.job._
 5 import enumeratum.EnumEntry
 6 import org.quartz.Job
 7
 8 sealed abstract class JobEnum(
 9                       /**
10                       * ID
11                       */
12                       val jobId: String,
13                       /**
14                         * job名称
15                         */
16                       val jobName: String,
17                       /**
18                         * job定义类
19                         */
20                       val jobClass : Class[_ <: Job],
21                       /**
22                         * 定时任务cron表达式
23                         */
24                       val cron: String) extends EnumEntry
25
26 /**
27   * 所有Job 枚举定义在此类, 不能重复
28   * jobId不能重复
29   * @author BarryWang create at 2018/5/12 10:45
30   * @version 0.0.1
31   */
32 case object JobEnum extends enumeratum.Enum[JobEnum]{
33   val values = findValues
34   case object DAY_TIME_PROCESS extends JobEnum("DAY_TIME_PROCESS",
35     "日次处理定时任务", classOf[DayTimeProcessJob], "0 30 2 * * ?")
36
37   case object RETIREMENT_SYNC_PROCESS extends JobEnum("RETIREMENT_SYNC_PROCESS",
38     "采购系统同步报废单据数据定时任务", classOf[RetirementSyncProcessJob], "0 0 1 * * ?")
39
40   case object PURCHASE_ORDER_2_SYNC_PROCESS extends JobEnum("PURCHASE_ORDER_2_SYNC_PROCESS",
41     "采购系统同步PO2数据定时任务", classOf[PurchaseOrder2SyncProcessJob], "0 0 5 * * ?")
42
43   case object SEND_EMAIL_PROCESS extends JobEnum("SEND_EMAIL_PROCESS",
44     "计划付款通知和已付款通知定时任务", classOf[SendEmailProcessJob], "0 0 18 * * ?")
45
46   case object CLOSE_ACCOUNT_BASE_DATA_PROCESS extends JobEnum("CLOSE_ACCOUNT_BASE_DATA_PROCESS",
47     "关账基础数据同步定时任务", classOf[CloseAccountBaseDataSyncJob], "0 30 23 L * ?")
48
49   case object INCOME_DETAIL_REPORT extends JobEnum(TReportTypeEnum.INCOMEDETAIL_REPORT.id.toString,
50     "每天生成营收明细报表定时任务", classOf[DailyGenIncomeDetailJob], "0 10 0 * * ?")
51
52   case object CHECK_ACCOUNT_PROCESS extends JobEnum("CHECK_ACCOUNT_PROCESS",
53     "对账系统自动对账定时任务", classOf[CheckAccountJob], "0 0 13 * * ?")
54
55   case object MEMBER_ACCOUNT_PROCESS extends JobEnum("MEMBER_ACCOUNT_PROCESS",
56     "会员自动对账定时任务", classOf[MemberAccountJob], "0 1 0 * * ?")
57
58   case object EXPORT_REPORT_LONG_HISTORY_STATUS extends JobEnum("EXPORT_REPORT_STATUS_PROCESS",
59     "清除90天前的财务报表定时任务", classOf[ExportReportStatusProcessJob], "0 15 1 ? * *")
60
61   case object DING_TALK_LOGS_IMPORT extends JobEnum("DING_TALK_LOGS_IMPORT",
62     "导入钉钉审批记录定时任务", classOf[DingTalkImportProcessLogsJob], "0 10 1 ? * *")
63
64   case object DING_TALK_DETAIL_IMPORT extends JobEnum("DING_TALK_DETAIL_IMPORT",
65     "导入钉钉审核通过审批单详情定时任务", classOf[DingTalkImportProcessDetailJob], "0 20 1 ? * *")
66
67   /**
68     * jobId与jobName映射关系
69     * @return
70     */
71   def jobIdNameMap : Map[String, String]={
72     JobEnum.values.map(x=> Map(x.jobId -> x.jobName)).fold(Map())((i,j) => i++j)
73   }
74
75   /**
76     * JobObject与JobEnum映射关系
77     * @return
78     */
79   def jobObjectEnumMap = {
80     JobEnum.values.map(x=> Map(x.jobClass.getName -> x)).fold(Map())((i,j) => i++j)
81   }
82
83   /**
84     * jobId与JobEnum映射关系
85     * @return
86     */
87   def jobIdEnumMap = {
88     JobEnum.values.map(x=> Map(x.jobId -> x)).fold(Map())((i,j) => i++j)
89   }
90
91 }

原文地址:https://www.cnblogs.com/barrywxx/p/10807545.html

时间: 2024-07-31 00:35:14

Scala 定义复杂枚举的相关文章

hdu3118Arbiter (利用二分图的定义,枚举每种状态)

Arbiter Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 773 Accepted Submission(s): 401 Problem Description Arbiter is a kind of starship in the StarCraft science-fiction series. The Arbiter-cla

黑马程序员—10-宏定义、枚举、typedef

l 预处理指令简介 u C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 u 为了区分预处理指令和一般的C语句,所有预处理指令都以符号"#"开头,并且结尾不用分号 u 预处理指令可以出现在程序的任何位置,它的作用范围是从它出现的位置到文件尾.习惯上我们尽可能将预处理指令写在源程序开头,这种情况下,它的作用范围就是整个源程序文件 u C语言提供的预处理指令主要有

宏定义和枚举

宏定义: 在代码的开头用一个字符串代替一个数据,有三个方面的好处 1.让一些数据有意义 #define  kOUT -1 #define  kAPPSecret  kdjghhgf #define  kAPPKey  123456 2.使用简便,类似于内敛函数的意思 #define  kAdd(a,b)  ((a)+(b)) #define  kmultiple(a,b)  ((a)*(b)) 3.输出日志的开关 #if  1 #define  Debug(x)  printf("%s\n&qu

Scala学习笔记--枚举

枚举 scala不用关注枚举的特别语法,取而代之的是标准库中的类, scala.Enumeration 想要创建新的枚举,只需呀拓展这个类的对象即可 object Color extends Enumeration{ val Red = Value val Green = Value val Blue = Value }

scala.的Enumeration枚举示例(转)

简介 在scala中没有枚举类型,但在标准类库中提供了Enumeration类来产出枚举.扩展Enumeration类后,调用value方法类初始化枚举中的可能值. 内部类value实际上是一个抽象类,真正创建的是val.因为实际上是Val,所以可以为Value传入id和name.如果不指定,id就是在前一个枚举值id上加一,name则是字段名. scala枚举示例 scala枚举示例 object TrafficLightColor extends Enumeration { type Tra

scala定义类

package cn.itcast.scala.day2 /** * Created by ZhaoXing on 2016/6/27. */class Person { val id = "9527" var age : Int = 18 private var name: String = "唐伯虎" private[this] var pet = "小强" def sayHi(): Unit = { println(name) } }//(

Scala 枚举: Enumeration 概述

Spark Scala 枚举 * Java 中的那套枚举并不能直接使用到 Scala 中* Scala 中的枚举使用轻量级 Enumeration 进行实现* Scala 中的枚举其实是一个伴随对象* Scala 中的枚举没有方法重写功能* Scala 中的枚举其实都是 Enumeration.Value 这个对象 和Java和C++不同,Scala并没有枚举类型.不过,Spark标准类库提供了一个 Enumeration类型,可以用于生成枚举,定义一个枚举类的对象,并以Value方法调用枚举中

scala学习手记11 - 类定义

这里会通过与Java比较的方式来说明scala是如何创建类的. 先来看一下Java中是如何定义一个类的: public class Car { private final int year; private int miles; public Car(int yearOfMake) { year = yearOfMake; } public int getYear() { return year; } public int getMiles() { return miles; } public

格式化说明符定义、转义字符、枚举、结构体、typedef

1.格式化说明符定义: %i,%d:输出十进制整型数 %6d:输出十进制整型数,至少6个字符宽 %li,%ld:输出长整数 %u:输出无符号整数 %lu:输出无符号长整数(相当于:unsigned long int) %f,%g:输出浮点类型数 %.2f:输出浮点类型数,小数点后有两位小数 %lf:输出双精度浮点数 %o:输出八进制数 %e:以科学计数法,输出浮点数 %c:输出字符 %s:输出字符串 %p,%x:输出变量的内存地址和十六进制数 2.转义字符: \a             响铃符