怎么会是这样~~~~~
本帖最后由 evababy 于 2017-3-15 12:37 编辑先看一段龌龊的代码
class A {
val num = 1
val arr = new Array(num)
}
class B extends A {
override val num = 2
}
val vb = new B
vb.num 等于?
vb.arr.length 等于?
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不能被重写
你在看**的scala讲解 断断续续的学了2周,彻底跪了!!并发的actor还搞出 akka貌似也是一个很庞大的库,瞬间觉得浪费两周时间
页:
[1]