evababy 发表于 2017-3-15 11:13:47

怎么会是这样~~~~~

本帖最后由 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不能被重写

w517424787 发表于 2017-3-15 11:42:23

你在看**的scala讲解

evababy 发表于 2017-3-15 16:27:41

断断续续的学了2周,彻底跪了!!并发的actor还搞出 akka貌似也是一个很庞大的库,瞬间觉得浪费两周时间
页: [1]
查看完整版本: 怎么会是这样~~~~~