2014-03-26 17 views
2

我在這裏丟失了某些東西。使用var Enum成員的案例類,退出範圍後未保存值

我有一個包含一些字符串成員和2個枚舉的情況下類。
類構造函數以字符串形式接收枚舉值。

我使用命令:

var order = Order.withName(orderInput) //Order is an object that extends Enumeration 

爲了避免對類結構異常(如果輸入字符串不是在枚舉值,我在構造之類的枚舉值設置爲默認值。

我對這個案例類驗證功能,驗證過程中我設置的枚舉,這種情況下,如果我得到的例外,它的驗證過程中,而不是在構造對象

代碼如下:

枚舉代碼:

object Order extends Enumeration { 
    type OrderType = Value 
    val asc = Value("asc") 
    val desc = Value("desc") 

    def validateOrder(orderInput:String) 
    { 
     val orderValidate = Order.isOrderType(orderInput) 
     if (!orderValidate) 
     throw new Exception("Order is invalid ("+orderInput+")!")  
    } 
    def isOrderType(s: String) = values.find(_.toString.equals(s)).isDefined 
} 

我的案例類:

case class ProductsByCategoriesRequest(langaugeInput:String, tenantIdInput:String, categoriesIds:List[String], startInput:Integer, maxResultsInput:Integer,sortInput:String,orderInput: String) 
extends ProductSorting 
with Paging 
with LanguageFilter 
with TenantFilter 
with BaseRequest 
{ 
    var order = Order.asc //default value 
    var sortField = Field.name //default value 
    val maxResults = maxResultsInput 
    val start = startInput 
    val language = langaugeInput 
    val tenantId = tenantIdInput 

    def validate() 
    { 

    if (StringUtils.isListNullOrEmpty(categoriesIds)) 
     throw new Exception("Categories Ids list is invalid")  
    validateLanguage 
    validateTenant 
    Order.validateOrder(orderInput) 
    var order = Order.withName(orderInput) 
    Field.validateField(sortInput) 
    var sortField = Field.withName(sortInput)  
    } 
} 

是什麼奇怪的?在驗證過程中,枚舉被改變了,但是後來當我使用這個對象,並且獲得枚舉的值時,它將始終是「asc」作爲默認值。雖然我把它設置爲「desc」並看到它發生了變化!

這可能與scala中的對象行爲有關,而事實上var在現有範圍可能之後並不保持成員的真實狀態?

感謝

回答

2

您正在定義變量(較窄的範圍)列舉的順序和中的SortField的validate而不是分配值以前聲明瓦爾 - 從ordersortField分配有刪除var

所以:

var order = Order.withName(orderInput) 
Field.validateField(sortInput) 
var sortField = Field.withName(sortInput) 

應該改爲:

order = Order.withName(orderInput) 
Field.validateField(sortInput) 
sortField = Field.withName(sortInput) 
+0

謝謝,這個編碼小時後很多會發生什麼:) – ilansch