说我有这样的枚举
object SimpleEnum extends Enumeration{
val ONE = Value(1)
val TWO = Value(2)
val THREE = Value(3)
etc...
}
我也有一个类,我想扩展 Ordered[SimpleEnum]
class SimpleClass(se: SimpleEnum) extends Ordered[SimpleEnum] {
override def compare(that: SimpleEnum): Int = this.se.[here i want to get instance of SimpleEnum, just like i used to do in java, but unfortunately it's not possible]
}
所以在 SimpleClass 中,我只需要获取附加到相应 SimpleEnum val 的值。
在 java 中,我可以在 enum 上声明一个变量,并通过这个 var 访问与它对应的实际值,在 scala 中,我正在寻找一种方法来获取 enum 的实例并获取其值。
最佳答案
有可能,使用 id
方法。
scala> object E extends Enumeration {
val A = Value(1)
val B = Value(7)
val C = Value(2)
}
defined object E
scala> E.A.id
res7: Int = 1
scala> E.B.id
res8: Int = 7
scala> E.C.id
res9: Int = 2
Enumeration
值也可以很容易地比较scala> E.A < E.B
res10: Boolean = true
scala> E.C < E.B
res11: Boolean = true
scala> E.B < E.A
res12: Boolean = false
引用 documentation更多
编辑
你在图片中的代码是错误的。首先,在您的原始代码中(不在图片中),
SimpleEnum
应该是 object
,不是 class
.一旦您进行更改,您的代码将无法编译,这应该会响起。你要
SimpleClass
能够包装您的枚举值。这些值的类型(即 ONE
、 TWO
、 THREE
)不是 SimpleEnum
,是SimpleEnum.Value
.这种类型的对象有 id
方法。class SimpleClass(se: SimpleEnum.Value) extends Ordered[SimpleEnum.Value] {
override def compare(that: SimpleEnum.Value): Int = se.id
}
一个常见的做法是为
Value
声明一个类型别名。与枚举对象的名称完全相同。然后你可以导入这个类型并使用它object SimpleEnum extends Enumeration {
type SimpleEnum = Value
val ONE = Value(1)
val TWO = Value(2)
val THREE = Value(3)
}
import SimpleEnum.SimpleEnum
class SimpleClass(se: SimpleEnum) extends Ordered[SimpleEnum] {
override def compare(that: SimpleEnum): Int = se.id
}
请注意
Enumeration#Value
已经实现 Ordered[Value]
.您可以在我之前链接的文档中验证它。没有经典的java
enum
在 scala 中,但由于该语言非常酷,因此可以创建一个名为 Enumeration
的常规类通过一些技巧可以实现类似的行为。
关于scala - 从 Scala 枚举中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37901974/