Scala中的toString与apply的区别

1 介绍toString

首先,scala中的toString和java中的toSting 一样的,scala基于jvm开发,而toString是java中的Object方法,所以,所有的对象都有这个方法,而全部的类都是继承于Object这个类,所以scala对象也含有toString方法。java中的 toString源码如下:

override def toString: String = {
  return getClass.getName + "@" + Integer.toHexString (hashCode)
}

toString方法默认得到类型名字+hashCode,如果与你的预期不同,就需要覆盖重写toString,通过override的方式重写toString 方法,而返回类型不变,是String类型。

2 toString与apply的区别

object ToStringAndApply {
  def main(args: Array[String]): Unit = {
    val logTime = new LogTime
    val logTime2 = new LogTime()
    val logTime3 = new LogTime()()
    println(logTime)   // this is toString method.
    println(logTime2) // this is toString method.
    // println(logTime3) // 由于apply方法没带括号,出错,更改如下面一段代码
  }
}

class LogTime {
  def apply = "this is apply method."
  override def toString: String = "this is toString method."
}
object ToStringAndApply {
  def main(args: Array[String]): Unit = {
    val logTime = new LogTime
    val logTime2 = new LogTime()
    val logTime3 = new LogTime()()
    println(logTime)   // this is toString method.
    println(logTime2) // this is toString method.
    println(logTime3) // this is apply method.
  }
}

class LogTime {
  def apply() = "this is apply method."
  override def toString: String = "this is toString method."
}

你可能感兴趣的:(Scala中的toString与apply的区别)