内容:
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中的样板代码。