こんにちは!ぐちです。
前回はちょっとした小ネタをご紹介しました。今回はよく使うであろう機能である「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マスターになっていきましょう!!
では今回はこの辺で。