获取值类型标签的父枚举

Posted

技术标签:

【中文标题】获取值类型标签的父枚举【英文标题】:Get parent Enumeration of Value typetag 【发布时间】:2021-02-22 20:39:28 【问题描述】:

我有一个 Type 实例,它引用特定 EnumerationValue

有没有办法获得父枚举的TypeSymbol?换句话说,如果我有typeOf[SomeEnumeration.Value],我如何获得typeOf[SomeEnumeration]

我知道此信息存在于运行时,因为我可以在调试控制台中使用valueType.pre.sym 看到它,但我无法提供用于在代码中访问它的公共 API。

我的第一个想法是valueType.typeSymbol.owner,但这只是为基类Enumeration 提供Symbol,而不是我想要的特定枚举实例。

【问题讨论】:

您能否添加一些简化的代码示例来说明您的问题并使其更容易重现和测试。 @michaJlS 在代码方面没有什么可添加的。我有typeOf[SomeEnumeration.Value](其中SomeEnumeration 不是直接知道的),我需要typeOf[SomeEnumeration] 【参考方案1】:

假设你有一个枚举

object WeekDay extends Enumeration 
  type WeekDay = Value
  val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value

然后尝试匹配TypeRef

import scala.reflect.runtime.universe._

typeOf[WeekDay.Value] match 
  case TypeRef(pre, _, _) => pre // WeekDay.type

【讨论】:

以上是关于获取值类型标签的父枚举的主要内容,如果未能解决你的问题,请参考以下文章

如何通过传入枚举值和属性类型来获取枚举的自定义属性?

避免任何类型在打字稿中获取枚举值

19 枚举

如何获取一个枚举类型元素的个数

mysql怎么获取数据表字段enum类型的默认值

static_cast 从底层类型值到枚举类并切换以获取编译器帮助