SAM-single abstract method
在Scala中,要某个函数做某件事时,会传一个函数参数给它。而在Java中,并不支持传送参数。
通常Java的实现方式是将动作放在一个实现某接口的类中,然后将该类的一个实例传递给另一个方法。
很多时候,这些接口只有单个抽象方法(single abstract
method),在Java中被称为SAM类型。
-
object SAM {
-
-
def main(args: Array[String]){
-
-
var data = 0
-
val frame = new JFrame("SAM Testing");
-
val jButton = new JButton("Counter")
-
-
//这是java实现方式
-
jButton.addActionListener(new ActionListener {
-
override def actionPerformed(event: ActionEvent) {
-
data += 1
-
println(data) //其实这两行才是核心处理逻辑,其他都是重复代码
-
}
-
})
-
-
//以下是Scala实现方式,他让我们只关注核心处理逻辑,去掉不相关操作,如创建匿名内部类,实现方法等
-
//定义一个隐式转换
-
implicit def convertedAction(action: (ActionEvent) => Unit) =
-
new ActionListener {
-
override def actionPerformed(event: ActionEvent) { action(event) } //action就是下面的函数本身
-
}
-
-
//核心逻辑处理,只关心data += 1,以及println
-
jButton.addActionListener((event: ActionEvent) => {data += 1; println(data)})
-
-
frame.setContentPane(jButton);
-
frame.pack();
-
frame.setVisible(true);
-
}
-
-
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/28912557/viewspace-1850583/
,如需转载,请注明出处,否则将追究法律责任。