这个问题与我的问题基本相同, 但是被接受的答案只返回它们的符号而不是case对象本身。
理论上,这应该很容易:
def getCaseObjects(enumType: Type) = {
val m = ru.runtimeMirror(getClass.getClassLoader)
enumType.typeSymbol.asClass.knownDirectSubclasses map { subclass =>
val enumObjMirror = m.reflectClass(subclass.asClass.toType.typeSymbol.asClass)
enumObjMirror.reflectConstructor(subclass.asClass.toType.decl(ru.termNames.CONSTRUCTOR).asMethod)()
}
}
这个很好用!
...除了它们与其Parent
封闭特质中包含的实例完全不同;太好了,我打破了“case对象是单例”的假设!
我可以在我的Parent
封闭特质中重写equals
和hashCode
,然后就完成了,但我更喜欢一种方法来获取那些特定的case对象,而不是看起来像它们的对象。这可能吗?如果有区别,我使用的是2.11。