在Scala枚举中重写toString方法
问题描述:
如何覆盖“toString”以使此Scala代码像下面的Java代码一样工作。在Scala枚举中重写toString方法
代码斯卡拉
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> object BIT extends Enumeration {
| type BIT = Value
| val ZERO = Value(0, "0")
| val ONE = Value(1, "1")
| val ANY = Value("x")
| }
defined module BIT
scala> BIT.ZERO.toString
res2: String = 0
scala> BIT.ZERO.id
res3: Int = 0
scala> BIT.ANY.id
res4: Int = 2
scala> BIT.ANY.toString
res5: String = x