SAM的全称是Single Abstract Method,即单一抽象方法。在Scala中,如果要某个函数做某件事,可以传递另一个函数参数给这个函数。而在Java中,并不支持传送函数参数,Java的实现方式是将动作放在一个实现某接口的类中,然后将该类的一个实例传递给另外一个方法。通常这些接口只有单个抽象方法(Single Abstract Method),在Java中被称为SAM类型。如Java的函数接口包含了单个抽象方法,函数接口也为Java 8 Lambda表达式提供了基础。
1.Java的实现 Java语言中swing界面开发代码示例,在单击界面上的按钮时候递增一个计数器。如例3-10所示。
【例3-10】Java语言中swing界面开发代码示例。
这些Java代码中包含很多Java语言中的样板代码,例如:override def action Performed(event:ActionEvent)等。Java代码的运行结果如下,每次单击界面上的counter按钮,就会在Console视图总数字上加1,运行结果如图3-3所示。单击界面上conuter按钮9次,Console视图打印输出计数器的值,依次显示1到9。
(www.daowen.com)
图3-3 Java代码的运行结果
2.Scala的SAM转换 在Scala中,更多地关注业务逻辑的实现,可以利用一个隐式转换,传入一个参数给addActionListener,在addActionListener中将计数器加1。如例3-11所示。
【例3-11】Scala语言中swing界面开发SAM转换。
Scala中SAM代码改造以后,代码更加简洁清晰,同样实现计数器的功能,每次单击界面上的counter按钮,就会在Console视图总数字上加1。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。