我想更好地瞭解斯卡拉,而我似乎無法找到類似於下面的代碼有效的用例:在Scala中擴展匿名類型的目的是什麼?
class C extends { def m() { /* ... */ } }
什麼是允許這樣的構造的原理是什麼?
謝謝!
我想更好地瞭解斯卡拉,而我似乎無法找到類似於下面的代碼有效的用例:在Scala中擴展匿名類型的目的是什麼?
class C extends { def m() { /* ... */ } }
什麼是允許這樣的構造的原理是什麼?
謝謝!
我想這裏的唯一理由是「如果可能,避免特殊情況」。你可以擴展任何類,一個匿名類是一個類,所以你可以擴展一個匿名類。
你可能是對的(+1)。但是,如果確實存在的話,會愛一個實際的用例:) – Eyvind
我不認爲有一個... –
我同意金,繼承允許共享行爲或表示給定的層次結構。但是,如果父類是匿名的,則不能有兩個子類擴展相同的父類。 – paradigmatic
事實上,這不是一個匿名類!它是一個早期的初始化器,它作爲超類之前構造函數的一部分運行。 從another stackoverflow question引述出色答卷:
abstract class X {
val name: String
val size = name.size
}
class Y extends {
val name = "class Y"
} with X
如果代碼是不是寫爲
class Z extends X {
val name = "class Z"
}
然後當Z得到初始化將發生一個空指針異常,因爲大小在正常名前初始化初始化的排序(上課之前的超類)。
它叫做Early definitions它們處理超類初始化順序問題。
您提供的示例不是結構類型,而是匿名類。這並不是說它解釋了爲什麼你可以擴展它... –
你是對的,我更新了標題 – Eyvind