在Scala枚举中重写toString方法

Suh*_*eil 15 enums scala

如何覆盖"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
Run Code Online (Sandbox Code Playgroud)

希望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
Run Code Online (Sandbox Code Playgroud)

我认为我重写了错误的"toString"方法.

Dan*_*mon 38

首先,是的,你要覆盖错误的toString方法.你正在覆盖BIT对象本身的方法,这不是很有用.

其次,只需简单地做就可以轻松完成

object BIT extends Enumeration {
  type BIT = Value
  val ZERO = Value("0")
  val ONE = Value("1")
  val ANY = Value("x")
}
Run Code Online (Sandbox Code Playgroud)

那你可以做

println(BIT.ONE) //prints "1"
Run Code Online (Sandbox Code Playgroud)