scala中的类(2)

给构造器参数提供默认值

scala让你可以为构造器参数提供默认值。
例如,在上一节中,我们展示了你可以定义一个这样的 Socket :

class Socket(var timeout: Int, var linger: Int) {
    override def toString = s"timeout: $timeout, linger: $linger"
}

这很好,但你可以通过为 timeout 和 linger 提供默认值来使这个类变得更好:

class Socket(var timeout: Int = 2000, var linger: Int = 3000) {
    override def toString = s"timeout: $timeout, linger: $linger"
}

为参数提供默认值后,你可以用很多不同的方式创建 Socket :

new Socket()
new Socket(1000)
new Socket(4000, 6000)

在REPL中开起来是这样:

scala> new Socket()
res0: Socket = timeout: 2000, linger: 3000

scala> new Socket(1000)
res1: Socket = timeout: 1000, linger: 3000

scala> new Socket(4000, 6000)
res2: Socket = timeout: 4000, linger: 6000

好处

为参数提供默认值最少有两个好处:

  • 你为参数提供首选的默认值
  • 你使得使用你创建的这个类的人可以用自己需要的值来覆盖这些默认值
    像上面展示的,第三个好处就是让使用者可以至少用三种方式构造Socket,仿佛它有三个构造器。
另一个好处:命名参数

另一个好事是 当你创建一个类的实例时,可以用命名参数:

val s = new Socket(timeout=2000, linger=3000)

这个特性有时会派上用场,例如当类的所有构造器参数都是相同的类型时。就像在这个例子中都是 Int ,下面的代码的可读性:

val s = new Socket(timeout=2000, linger=3000)

会比这个好很多:

val s = new Socket(2000, 3000)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值