当前位置: 首页 > 知识库问答 >
问题:

从scala枚举获取值

宗政子辰
2023-03-14

假设我有这样的枚举

object SimpleEnum extends Enumeration{
 val ONE = Value(1)
 val TWO = Value(2)
 val THREE = Value(3)
 etc...
}

我也有一个类,我想扩展有序[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中,我能够声明一个变量的枚举和访问一个实际的值对应于它的这个var,在scala我正在寻找一种方法来获取枚举的实例,并接触到它的值。

共有2个答案

满勇军
2023-03-14

这个问题已经得到了回答,但我的方法如下:

object SimpleEnum extends Enumeration{
 type SimpleEnum = Value
    val ONE = Value(1)
    val TWO = Value(2)
    val THREE = Value(3)
    etc...
}

class SimpleClass(val i : Int){
    def getNumber() {
        import SimpleEnum._
        SimpleEnum(i)
    }
}
陆伟
2023-03-14

可以使用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

枚举值也可以轻松比较

scala> E.A < E.B
res10: Boolean = true

scala> E.C < E.B
res11: Boolean = true

scala> E.B < E.A
res12: Boolean = false

有关更多信息,请参阅文档

图片中的代码错误。首先,与您的原始代码(不在图片中)一样,SimpleEnum应该是对象,而不是类。一旦您进行了更改,您的代码将无法编译,这应该会敲响警钟。

您希望SimpleClass能够包装您的枚举值。这些值的类型(即ONETWOTHREE)不是SimpleEnum,而是SimpleEnum。值。这种类型的对象有id方法。

class SimpleClass(se: SimpleEnum.Value) extends Ordered[SimpleEnum.Value] {
  override def compare(that: SimpleEnum.Value): Int = se.id
}

通常要做的一件事是使用与枚举对象完全相同的名称为值声明类型别名。然后可以导入此类型并使用它

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
}

请注意,枚举#值已经实现了有序[值]。您可以在我之前链接的文档中验证它。

scala中没有经典的javaenum,但是因为这种语言非常酷,所以可以创建一个名为Enumation的常规类,通过一些技巧可以实现类似的行为。

 类似资料:
  • 我应该工作,对吧?但它不是!!!!它告诉我dbValue可以转换为RelationActiveEnum...

  • 问题内容: 假设是,我将如何产生给定序数的枚举值? 问题答案: 足够了。一条线; 足够简单。

  • 我不得不说我不理解Scala枚举类。我可以从文档中复制粘贴示例,但我不知道是怎么回事。 什么是?为什么我必须写这个? 为什么?这到底是什么意思? 为什么必须导入对象?并且, 当我编写时,为什么要键入,而不是键入?

  • 本文向大家介绍Java获取枚举的值,包括了Java获取枚举的值的使用技巧和注意事项,需要的朋友参考一下 示例 每个枚举类都包含一个名为的隐式静态方法values()。此方法返回一个包含该枚举的所有值的数组。您可以使用此方法遍历值。重要的是要注意,此方法每次调用时都会返回一个新数组。 如果需要,Set也可以使用EnumSet.allOf(Day.class)。

  • 问题内容: 我有一个枚举,看起来像: 我有一个看起来像的测试班 输出为: 代替 我不确定这里出什么问题了吗?? 问题答案: 您需要 重写枚举的方法:

  • 但我的代码不起作用,它说类型没有定义: