Scala:如何知道一个类是否是一个枚举; isInstanceOf [Enumeration]不起作用

时间:2009-11-07 03:20:05

标签: reflection scala enumeration

我正在使用scala编写一个将对象(或模型)保存到数据库(用于app引擎)的序列化程序,我需要将某些字段视为特殊情况。例如,如果字段的类型为Array [Byte],则将其另存为blob。我需要将Enumerations视为特殊情况,但我无法知道如何知道类型是否为枚举。

例如:

object UserType extends Enumeration {
    val Anonym, Registered, Admin, Super = Value
}

var value = UserType.Admin  
value.isInstanceOf[Enumeration] // this returns false

我都不能value.isInstanceOf[Enumeration.Value],因为价值是私有的......无论如何,我认为这也会失败。

任何想法?
谢谢!

2 个答案:

答案 0 :(得分:7)

value.isInstanceOf[Enumeration$Value]

答案 1 :(得分:4)

您可以使用以下方法解决这个问题:

scala> value.getClass              
res102: java.lang.Class[_] = class scala.Enumeration$Val

scala> value.getClass.getSuperclass
res103: java.lang.Class[_ >: ?0] = class scala.Enumeration$Value

scala> value.getClass.getSuperclass.getSuperclass
res104: java.lang.Class[_ >: ?0] = class java.lang.Object