分享

怎么会是这样~~~~~

evababy 发表于 2017-3-15 11:13:47 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 2 4723
本帖最后由 evababy 于 2017-3-15 12:37 编辑

先看一段龌龊的代码
[mw_shl_code=scala,true]class A {
  val num = 1
  val arr = new Array[Int](num)
}
class B extends A {
  override val num = 2
}

val vb = new B
vb.num 等于?
vb.arr.length 等于?[/mw_shl_code]

vb.num=2
vb.arr.length=0 ?????????
vb.arr.length竟然是0,给的看上去似乎有那么点道理又不容易被理解的解释是:当初始化arr的时候发现使用了num,而num是被重写的,有因此时B还没有被初始化,所以num此时是0(与JAVA格格不入)

写多10几年的JAVA代码表示无法接受啊!!!!实在太容易出错了,scala太让人无语了!!

解决办法是:在A类增加对num的修饰 finla 或者 lazy ,也就是说限定了num不能被重写

已有(2)人评论

跳转到指定楼层
w517424787 发表于 2017-3-15 11:42:23
你在看**的scala讲解
回复

使用道具 举报

evababy 发表于 2017-3-15 16:27:41
断断续续的学了2周,彻底跪了!!并发的actor还搞出 akka  貌似也是一个很庞大的库,瞬间觉得浪费两周时间
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条