如何使用反射獲取對象中的所有對象?如何通過混合特性與反射來訪問對象內的對象?
考慮以下代碼:
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