如何覆盖"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)