【问题标题】: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]

标签: scala reflection types runtime scala-reflect


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 2012-03-19
    • 1970-01-01
    相关资源
    最近更新 更多