переменная для захвата полного типа
посмотрел на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:Я создал новый вопрос для второй части этого вопроса по просьбе Кена Блума.