scala基础27-SAM转换
2016-07-26 22:59
369 查看
import javax.swing.JButton import java.awt.event.ActionListener import java.awt.event.ActionEvent import javax.swing.JFrame object Test { /** * 在Scala中,要某个函数做某件事时,会传一个函数参数给它。 * 而在Java中,并不支持传送参数。通常Java的实现方式是将动作放在一个实现某接口的类中, * 然后将该类的一个实例传递给另一个方法。很多时候,这些接口只有单个抽象方法(single abstract method), * 在Java中被称为SAM类型。 * @param args */ def main(args: Array[String]): Unit = { var count = 0 val frame = new JFrame("SAM Testing") val button = new JButton("Increment") //java方式 // button.addActionListener(new ActionListener { // override def actionPerformed(event: ActionEvent) { // count += 1 // println(count) // } // }) /** * scala方式: 隐式转换,将一种类型自动转换成另外一种类型,是个函数。 * 因为在Scala中,函数是头等公民,所以隐式转换的作用也大大放大了。 * 将这个函数和界面代码放在一起,就可以在所有预期ActionListener对象的地方,传入(ActionEvent)=>Unit函数参数。 * @param action * @return */ implicit def makeAction(action: (ActionEvent) => Unit) = new ActionListener { override def actionPerformed(event: ActionEvent) { action(event) } } button.addActionListener((event: ActionEvent) => {count += 1; println(count)}) frame.setContentPane(button) frame.pack() frame.setVisible(true) } }
相关文章推荐
- EventBus3.0-线程之间传递
- php学习笔记(五)删除
- 第21条:用函数对象表示策略
- CentOS 7 : Docker私有仓库搭建和使用
- Mac 下 MySQL 5.7 连接 navicat 中文乱码问题终极解决方案
- java 获得项目绝对路径
- SQLserver总结(1)
- Spring IoC和DI——学习笔记
- cookie与session详解
- after伪元素实现空心三角箭头和X图标
- Linux学习篇之用户与用户组
- Windows概要
- setMobileDataEnabled方法不能再被调用 Android L and later
- android学习之菜单的子菜单的学习
- android学习之菜单的子菜单的学习
- android学习之菜单的子菜单的学习
- android学习之菜单的子菜单的学习
- Javascript事件委托
- MJExtension 之模型建立后没有效果
- 03_排序_冒泡排序