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在現有範圍可能之後並不保持成員的真實狀態?
感謝
謝謝,這個編碼小時後很多會發生什麼:) – ilansch