下面的代碼從這個職位是採取:How to create Scala swing wrapper classes with SuperMixin?Scala包裝類通過擴展組件和SequentialContainer.Wrapper特質,我對特質有正確的理解嗎?
import scala.swing._
import javax.swing.JPopupMenu
class PopupMenu extends Component with SequentialContainer.Wrapper {
override lazy val peer: JPopupMenu = new JPopupMenu with SuperMixin
def show(invoker: Component, x: Int, y: Int): Unit = peer.show(invoker.peer, x, y)
}
我一直在試圖使定製包裝,以便需要明白這一點,這是很簡單的,但由於 我纔剛剛開始想結識斯卡拉,所以我有點不確定特徵。所以我聽到的是,特質就像多重繼承,你可以混合搭配它們?
我畫了一張圖表示PopupMenu在整個繼承結構中的位置。只是爲了澄清一些事情:
1)它似乎重寫了懶惰val peer:JComponent從組件,也從SequentialContainer.Wrapper獲取內容屬性? (紫色文字)是嗎?
2)Sequential.Wrapper也有一個抽象的def peer:JComponent ..但是這不是被override的,所以在這裏它不被使用?
3)令人困惑的是Component和Sequential.Wrapper有一些相同的屬性:它們都有def publish和def subscribe(紅色文本)..但popupMenu將使用的屬性是從Component中訂閱/發佈類?
4)爲什麼我們不能編寫PopupMenu使用Component擴展SequentialContainer.Wrapper?
希望這一次不是太多問題。幫助會非常讚賞,我是一個初學者斯卡拉..