第24讲:Scala中SAM转换实战详解

来源:互联网 发布:dgn转dwg软件 编辑:程序博客网 时间:2024/05/13 14:54

内容:

1、SAM的重大意义

2、SAM转化代码实战

 def main(args: Array[String]){        var data = 0    val frame = new JFrame("SAM Testing");    val jButton = new JButton("Counter")    jButton.addActionListener(new ActionListener {  override def actionPerformed(event: ActionEvent) {    data += 1    println(data)  }    })

//以上代码类似于Java中的样本代码,点击按钮后动作使data+1

   为了使下面函数实现,使用隐式转换,该函数中的参数ActionEvent必须和动作函数中的参数一致;如果没有隐式转化addActionListener就会报错。

  implicit def convertedAction(action: ActionEvent => Unit) =     new ActionListener {      override def actionPerformed(event: ActionEvent) { action(event) }  }    jButton.addActionListener((event: ActionEvent) => {data += 1; println(data)})          frame.setContentPane(jButton);       frame.pack();      frame.setVisible(true);    }

   构建jButton,当有点击后动作监听器执行具体的函数体中的响应事件event将样板代码转换为专注函数本身的处理,即为一个SAM转换的过程。之所以能够实现SAM的转化,就是因为隐式转化的时候覆写(override)了Java中的样板代码。





0 0