переменная для захвата полного типа

посмотрел наScala вопрос об эмуляции Javaenum а такжетематические классы и перечисление но это кажется слишком большим усилием для слишком меньшей выгоды.

В основном я хотел бы иметьvalues метод, возвращающий все одноэлементные объектыDayOfWeek не повторяя себя несколько раз.

Вот как должен выглядеть мой код:

object DayOfWeek extends MyEnum {
  object MONDAY extends DayOfWeek(1)
  object TUESDAY extends DayOfWeek(2)
  object WEDNESDAY extends DayOfWeek(3)
  object THURSDAY extends DayOfWeek(4)
  object FRIDAY extends DayOfWeek(5)
  object SATURDAY extends DayOfWeek(6)
  object SUNDAY extends DayOfWeek(7)
}

class DayOfWeek(ordinal: Int)

Методvalues должен вернуть что-то вроде, если это было написано так:

val values = Array(MONDAY, TUESDAY, WEDNESDAY, THURSDAY,
                   FRIDAY, SATURDAY, SUNDAY)

Все должно происходить вMyEnum черта, поэтому мне нужно только расширить его, чтобы получить функциональность.

trait MyEnum {
  val values = this.getClass.getField("MODULE$") etc. etc.
}

Любое предложение, как это можно было бы сделать именно? Идея в том, чтоvalues получает доступ к классу и находит все одноэлементные объекты класса, который они расширяют.

Изменить: похоже, что все предложения не принимают во внимание, что пользователь может создавать объекты, которые, конечно, должны быть сопоставимы с определенными.

Я попробую привести еще один пример, может быть, это более понятно:

object MonthDay extends MyEnum {
  //Some important holidays
  object NewYear       extends MonthDay( 1,  1)
  object UnityDay      extends MonthDay(11,  9)
  object SaintNicholas extends MonthDay(12,  6)
  object Christmas     extends MonthDay(12, 24)
}

class MonthDay(month: Int, day: Int)

//Of course the user can create other MonthDays
val myBirthDay = new MonthDay(month, day)

if(!MonthDay.values.contains(myBirthDay)) "Well, I probably have to work"
else "Great, it is a holiday!"

Я хочу иметь черту (MyEnum) который я могу смешать с объектом, содержащим мои «объекты перечисления» с методами, чтобы вернуть их список (def values: List[MonthDay]или перебрать их (def next: MonthDay или жеdef previous: MonthDay).

PPS:Я создал новый вопрос для второй части этого вопроса по просьбе Кена Блума.

Ответы на вопрос(3)

Ваш ответ на вопрос