如何为Scala 3枚举实现通用的enumDescr描述获取方法
Scala 3 通用
enumDescr实现方案 Scala 3 原生支持enum语法,不再依赖Scala 2的Enumeration类,所有枚举的伴生对象都会自动混入scala.reflect.Enum特质,我们可以直接基于这个特质实现通用方法,和Scala 2的用法几乎一致。
实现代码
import scala.reflect.Enum def enumDescr[E <: scala.Enum](enumeration: Enum[E]): String = // 去掉伴生对象类名默认的$后缀,得到纯枚举名 val enumName = enumeration.getClass.getSimpleName.stripSuffix("$") s"$enumName: ${enumeration.values.mkString(", ")}"
入参说明
入参类型Enum[E]是Scala 3编译器为所有枚举伴生对象自动实现的公共接口,自带values方法返回所有枚举实例,不需要对自定义枚举做任何额外修改。
使用示例
和你预期的调用方式完全兼容:
@description(enumDescr(InvoiceCategory)) enum InvoiceCategory: case `Travel Expenses` case Misc case `Software License Costs`
调用后输出结果为:InvoiceCategory: Travel Expenses, Misc, Software License Costs
内容的提问来源于stack exchange,提问作者pme
相关产品推荐
相关产品推荐

