Scala的ACM转换

SAM-single abstract method
在Scala中,要某个函数做某件事时,会传一个函数参数给它。而在Java中,并不支持传送参数。
通常Java的实现方式是将动作放在一个实现某接口的类中,然后将该类的一个实例传递给另一个方法。
很多时候,这些接口只有单个抽象方法(single abstract method),在Java中被称为SAM类型。


点击(此处)折叠或打开

  1. object SAM {

  2.   def main(args: Array[String]){
  3.     
  4.     var data = 0
  5.     val frame = new JFrame("SAM Testing");
  6.     val jButton = new JButton("Counter")
  7.   
  8.     //这是java实现方式
  9.     jButton.addActionListener(new ActionListener {
  10.      override def actionPerformed(event: ActionEvent) {
  11.      data += 1
  12.      println(data) //其实这两行才是核心处理逻辑,其他都是重复代码
  13.      }
  14.     })
  15.    
  16.     //以下是Scala实现方式,他让我们只关注核心处理逻辑,去掉不相关操作,如创建匿名内部类,实现方法等
  17.     //定义一个隐式转换
  18.     implicit def convertedAction(action: (ActionEvent) => Unit) =
  19.      new ActionListener {
  20.      override def actionPerformed(event: ActionEvent) { action(event) } //action就是下面的函数本身
  21.     }
  22.    
  23.     //核心逻辑处理,只关心data += 1,以及println
  24.     jButton.addActionListener((event: ActionEvent) => {data += 1; println(data)})
  25.     
  26.     frame.setContentPane(jButton);
  27.     frame.pack();
  28.     frame.setVisible(true);
  29.   }

  30. }


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28912557/viewspace-1850583/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28912557/viewspace-1850583/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值