在Scala中允许你给构造函数参数提供一个默认值,那么当你不指定参数值的时候那么构造函数就会使用默认值。
scala> class Socket(val timeout: Int = 10000)
defined class Socket
scala> val s = new Socket()
s: Socket = Socket@311d617d
scala> s.timeout
res0: Int = 10000
scala> val s = new Socket(5000)
s: Socket = Socket@22a71081
scala> s.timeout
res1: Int = 5000
你也可以使用辅助构造函数来实现一样的效果。
scala> class Socket(val timeout:Int) {
| def this() = this(10000)
| override def toString = s"timeout: $timeout"
| }
带默认值的多参数构造函数
scala> class Socket(val timeout: Int = 1000, val port: Int = 8888) {
| override def toString = s"timeout=$timeout port=$port"
| }
defined class Socket
不指定构造函数参数值,那么系统就会使用默认参数值,但是你必须按构造函数顺序指定参数值。
scala> val s = new Socket()
s: Socket = timeout=1000 port=8888
scala> val s = new Socket(3000)
s: Socket = timeout=3000 port=8888
scala> val s = new Socket(3000, 8080)
s: Socket = timeout=3000 port=8080
如果我们只想指定port参数值怎么办呢,你可以使用参数=参数值的方式来调用构造函数。并且使用这种方式我们打乱构造函数参数顺序。
scala> val s = new Socket(port=8080)
s: Socket = timeout=1000 port=8080
scala> val s = new Socket(port=8080, timeout=1000)
s: Socket = timeout=1000 port=8080