Перечислите все объекты дела, расширяющие черту - PullRequest
1 голос
/ 18 июня 2019

Я пытаюсь повторить 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]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...