【初心者向け】JavaとScalaを同時にマスターしよう!Vol. 7

こんにちは!ぐちです。

前回はちょっとした小ネタをご紹介しました。今回はよく使うであろう機能である「toStringのオーバーライド」の機能についてご紹介します。

Vol.6はこちらからどうぞ。

toString

オブジェクトを文字列として表示する関数(メソッド)ですが、デフォルトの状態だと出力されるのはアドレスといいますか、よくわからない値が表示されます。

まずは下記のコードをご覧ください。

Java

メイン関数は下記の通りです。

public class Main {
    public static void main(String[] args) {
        Test test = new Test();
        test.setValue(10);
        System.out.println(test.toString());
    }
}

Testクラスは下記の通りです。

public class Test {
    private int value = 0;

    public void setValue(int v) {
        value = v;
    }

    public int getValue() {
        return value;
    }
}

この実行結果は下記のようになります。

Test@33833882

Scala

続いてScalaでのコードを見て見ましょう!

メイン関数は下記の通りです。

object Main {
    def main(args: Array[String]): Unit = {
        val test = new Test
        test.setValue(10)
        println(test.toString())
    }
}

Testクラスは下記の通りです。

class Test {
    var value = 0

    def setValue(v: Int): Unit = {
        value = v
    }

    def getValue(): Int = {
        return value
    }
}

これらの実行結果は下記のようになります。

Test@38bc8ab5

デバッグに使いたい

どちらも上記の実行結果だと何を指しているのかよくわからないので、toStringをコールした結果をカスタマイズして意味のわかる結果を返したい場合に、toStringをオーバーライドする方法が提供されています。

Java

まずはJavaから見てみましょう。

public class Test {
    private int value = 0;

    public void setValue(int v) {
        value = v;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return "Test has value :" + value;
    }
}

@Overrideアノテーションを記述し、全てのクラスの親クラスのメソッドであるtoStringメソッドを上書きします。

こうすることで実行結果も下記のようにわかりやすくすることができます。

Test has value :10

Scala

Scalaでのオーバーライドはさらに記述量が少なくシンプルな書き方です。

class Test {
    var value = 0

    override def toString = "Test has value :" + value

    def setValue(v: Int): Unit = {
        value = v
    }

    def getValue(): Int = {
        return value
    }
}

@Overrideアノテーションは不要で、toString関数に返却したい値を設定するだけです。

これで、実行結果は下記の通りになります。はずです。

Test has value :10

こういった仕組みも活用しどんどんScala&Javaマスターになっていきましょう!!

では今回はこの辺で。