如何使用反射获取对象中的所有对象?如何通过混合特性与反射来访问对象内的对象?
考虑以下代码:
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)
trait MyEnum {
val values: List[MonthDay] = this.getClass.getField("MODULE$")...
val next: MonthDay = ...
val previous: MonthDay = ...
}
//Of course the user can create his own 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]
)的列表或者iterate (def next: MonthDay
或def previous: MonthDay
)没有重复自己几次(这是绝对至关重要!)。
想法是values
访问MonthDay
对象,并找到它们正在扩展的类的所有单例对象(MonthDay
)和反射。类似
这看起来非常有趣!这可能是一种值得使用的方法,直到真正的解决方案工作('getClass.getDeclaredClasses',目前不工作,看到这个错误报告:http://lampsvn.epfl.ch/trac/scala/ticket/4023) – soc 2010-11-23 01:24:36
当然,我我可以开一个更好的名字,你有什么想法吗? – soc 2010-11-23 01:25:52
@soc:也许'FindContainedVals' – 2010-11-23 01:27:35