2012-05-02 50 views
1

在Scala中,我有一個案例類:設置格式

case class MonthSelectionInfo(monthSelection: MonthSelection.Value, customMonth:Int = 0, customYear:Int = 0) { 

def this(monthSelection: MonthSelection.Value) = { 
    this(monthSelection, 0, 0) 
} 
} 


object MonthSelection extends Enumeration { 
    type MonthSelection = Value 

    val LastMonth, ThisMonth, NextMonth, CustomMonth = Value 
} 

當我有案件類的實例,我不得不使用

myMonthSelectionInfo.monthSelection

myMonthSelectionInfo.eq(newMonthSelection)

得到&設置MonthSelection實例包含在裏面。

是否有任何不錯的Scala方式來設置getter & setter,使其看起來更像普通的Java POJO?例如

myMonthSelectionInfo.setMonthSelection(newMonthSelection) 

回答

5

@BeanProperty註釋可以爲字段生成getter和setter。

case class MonthSelectionInfo(@reflect.BeanProperty var monthSelection: MonthSelection.Value) 

scala> val ms = MonthSelectionInfo(MonthSelection.LastMonth) 
ms: MonthSelectionInfo = MonthSelectionInfo(LastMonth) 

scala> ms.setMonthSelection(MonthSelection.ThisMonth) 

sscala> ms.getMonthSelection 
res4: MonthSelection.Value = ThisMonth 
+0

請注意,這會產生額外的getter和setter。它不會刪除Scala的默認獲取者和設置者。 –

+0

完美,謝謝 – Reimeus

+0

不應該大小寫不可改變? – Lukasz

0

在面向對象編程中,getters和setters是大多數人都會認同的東西,它具有一些真實世界的好處。不幸的是,他們有時會寫作煩人。它們通常不包含很多代碼,但是當你一遍又一遍地寫同樣的東西時,它會變得非常快速。根據我的經驗,大多數getter和setter非常相似,所以有理由認爲必須有一個「更好」的方法來達到同樣的結果。

link可能會幫助你。