16

「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

Wanted 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」メソッドをオーバーライドしていると思います。

4

2 に答える 2

40

まず、間違った 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"
于 2012-07-12T17:49:02.207 に答える