【发布时间】:2017-06-27 15:32:03
【问题描述】:
最近我们将其中一个枚举类升级为密封类将对象作为子类,这样我们就可以创建另一层抽象来简化代码。但是,我们不能再通过Enum.values() 函数获得所有可能的子类,这很糟糕,因为我们严重依赖该功能。有没有办法通过反射或任何其他工具来检索这些信息?
PS:手动将它们添加到数组中是不可接受的。目前有 45 个,并且计划增加更多。
这就是我们的密封类的样子:
sealed class State
object StateA: State()
object StateB: State()
object StateC: State()
....// 42 more
如果有一个 values 集合,它将是这个形状:
val VALUES = setOf(StateA, StateB, StateC, StateC, StateD, StateE,
StateF, StateG, StateH, StateI, StateJ, StateK, StateL, ......
自然没有人愿意养这样一个怪物。
【问题讨论】:
-
AFAIK 手动将它们添加到数组中实际上是唯一可接受 的方法。您无法知道给定类的所有可能子类。这是 JVM 实际工作方式的限制。如果我错了,请纠正我。
-
你想达到什么目的?可以发一些代码吗?
-
@m0skit0 实际上有 implementation 这样做,但是对于这种情况来说似乎太重了。
-
@D3xter 获取给定密封类的所有子类,如标题所述,用法是作为 Enum.values 的替换。 有一些问题无需代码即可理解,这就是其中之一。如果你真的担心的话,我还是添加了一些代码。
标签: kotlin