Я пытаюсь повторить enum.values
, используя trait
и case object
подход.Например, с обычным enum
вы можете сделать:
object Permission extends Enumeration {
type Permission = Value
val SOME_THINGS, EVERYTHING = Value
}
val allEnumValues: Set[Permission] = Permission.values
Мне нужно добавить логику к каждому Permission
, чтобы проверить, должен ли он иметь пользователь, поэтому я пытаюсь использовать trait
и case object
подход.При таком подходе перечисление становится примерно таким:
trait Permission {
def name: String
def appliesTo(user: User): Boolean
}
object Permission {
def values: Set[Permission] = ... // Can I use reflection here?
case object SOME_THINGS extends Permission {
override def name: String = "SOME_THINGS"
override def appliesTo(user: User): Boolean = user.isTeamMember
}
case object EVERYTHING extends Permission {
override def name: String = "EVERYTHING"
override def appliesTo(user: User): Boolean = user.isAdmin
}
}
Как я могу использовать отражение, чтобы получить список объектов case, расширяющих Permission
и, следовательно, реализовать мой метод def values: Set[Permission]
?