我已经看过了Scala关于模拟Java的问题enum and 案例类与枚举但这似乎付出了太多的努力,却收效甚微。
基本上我想要一个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
or def previous: MonthDay
).
PPS: 我为此问题的第二部分创建了一个新问题应肯·布鲁姆的要求。