scala - 覆盖 Scala 枚举中的 toString 方法

标签 scala enums

如何覆盖“toString”以使此 Scala 代码的行为类似于以下 Java 代码。

Scala 中的代码

object BIT extends Enumeration {
     type BIT = Value
     val ZERO, ONE, ANY = Value

     override def toString() =
       this match {
       case ANY => "x "
       case ZERO=> "0 "
       case ONE => "1 "
     }
}

val b = ONE
println(ONE)  // returns ONE

想要的 toString 行为应该产生与以下 Java 代码相同的输出。
public enum BIT {
    ZERO, ONE, ANY;

    /** print BIT as 0,1, and X */
    public String toString() {
        switch (this) {
        case ZERO:
            return "0 ";
        case ONE:
            return "1 ";
        default://ANY
            return "X ";
        }
    }
}

BIT b = ONE;
System.out.println(b); // returns 1

我想我覆盖了错误的“toString”方法。

最佳答案

首先,是的,您覆盖了错误的 toString 方法。您正在覆盖 BIT 上的方法对象本身,这不是很有用。

其次,你只需简单地做这件事就容易多了

object BIT extends Enumeration {
  type BIT = Value
  val ZERO = Value("0")
  val ONE = Value("1")
  val ANY = Value("x")
}

然后你可以做
println(BIT.ONE) //prints "1"

关于scala - 覆盖 Scala 枚举中的 toString 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11457559/

相关文章:

java - 运行时创建内存高效常量的技术

java - 如何使用 Play framework 2.0/2.1 制作管理面板

java - 将 PgArray 或 java.sql.Array 转换为 Scala 集合

java - 是否有一个好的库可以在 scala(或 java)应用程序中嵌入命令提示符

sql - collect_list 保持秩序(sql/spark scala)

python - SQLAlchemy 中查找表数据是如何声明和初始化的?

java - 如何在这个项目中使用枚举?

java - 当枚举类型引用是 Class<?> 时,如何将 String 转换为枚举值?

c++ - 为什么我们不能使用两个不同的可互换枚举?作为函数参数?

scala - 如何编译Scala Hello World应用程序