2016-08-30 63 views
1

我有一个遗留的Scala应用程序,我们使用枚举(所以我没有选择更改为案例类)。我在用下面的函数问题:斯卡拉选项[枚举]匹配没有按预期工作

def mapFamily(assetMetadata: AssetMetadata): String = { 
    assetMetadata.family match { 
    case None => throw InvalidAssetFamilyException("Family is required") 
    case Some(EnumFamily.Inside) => "1" 
    case Some(EnumFamily.Outside) => "2" 
    case unknown => throw InvalidFamilyException(s"Unknown Family: $unknown.") 
    } 

assetMetadat.familyOption[EnumFamily.Family]

枚举如下所示:

object EnumFamily extends Enumeration { 
    type Family = Value 
    val Inside = Value("Inside") 
    val Outside = Value("Outside") 
} 

当我尝试打电话mapFamily我总是对未知/异常情况下的消息如下:

Unknown Family: Some(Inside) 

为什么它不正确匹配?

+0

我认为问题是'case Some(Family.Inside)=>“1”'因为它应该是'case Some(EnumFamily.Inside)=>“1”' – TheKojuEffect

+0

对不起@TheKojuEffect,就是这样是(我在发布之前重新命名了一些东西,并搞砸了)。我编辑了代码来反映这一点。 – djsumdog

+0

你正在使用的scala版本是什么,scala为2.11.8',按预期工作。 – TheKojuEffect

回答

1

原来这是问题是完全无效的。我的问题是由于反序列化。我们正在使用的json4s版本(是的,它是遗留的,永远不要使用json4s)实际上将它反序列化为具有相似属性的错误枚举(并以某种方式反射性地击败所有类型检查)。

我会离开这个问题,但如果你到达这里,你是否使用序列化程序?使用你的调试器,看看你是否得到你期望的类型。