Scala学习之类和属性篇(四):带有默认值的构造函数

原创
2016/12/10 12:01
阅读数 593

在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

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部