Scala的ACM轉換
SAM-single abstract method
在Scala中,要某個函式做某件事時,會傳一個函式引數給它。而在Java中,並不支援傳送引數。
通常Java的實現方式是將動作放在一個實現某介面的類中,然後將該類的一個例項傳遞給另一個方法。
很多時候,這些介面只有單個抽象方法(single abstract method),在Java中被稱為SAM型別。
在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部落格 ” ,連結:http://blog.itpub.net/28912557/viewspace-1850583/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Scala Essentials: 隱式轉換
- Scala 將BigDecimal轉換為LongDecimal
- Cris 的 Scala 筆記整理(十):隱式轉換筆記
- scala和java資料型別轉換Java資料型別
- ACM 字串替換ACM字串
- Scala - 隱式轉換和隱式引數
- Scala隱式轉換與隱式引數
- scala中隱式轉換之隱式轉換呼叫類中本不存在的方法
- scala常用操作-Tuple元祖轉換成String字串字串
- 雜記四:scala 柯理化和隱式轉換
- scala隱式轉換優先順序問題
- [轉] Scala 中的非同步事件處理非同步事件
- 【Scala篇】--Scala中的函式函式
- 轉享: 在Scala中使用GuiceGUI
- Scala學習(五)---Scala中的類
- [轉] Scala Try 與錯誤處理
- 【Scala】Scala之ObjectObject
- Scala隱式轉換理論及進階實踐-Coding技術進階實戰
- 用於日期轉換的訊息轉換器
- ACM zb的生日ACM
- 有趣的 Scala 語言: 簡潔的 Scala 語法
- 【Scala】Scala之TraitsAI
- 熊與猴的轉換(轉)
- 好程式設計師大資料教程Scala系列之隱式轉換和隱式引數程式設計師大資料
- scala簡明教程:偏函式、高階函式、Future非同步程式設計、隱式轉換函式非同步程式設計
- 【ACM數論】和式變換技術,也許是最好的講解之一ACM
- 日期格式的轉換
- Scala 的學習
- Scala的泛型泛型
- Scala的Abstract Types
- Scala的HelloWorld程式
- Scala的繼承繼承
- Scala的applyAPP
- 【Scala】Scala之Packaging and ImportsImport
- Scala學習(六)---Scala物件物件
- ACM 懶省事的小明ACM
- ACM 矩形的個數ACM
- [翻牆轉]Using Scala Implicits to Replace Mindless Delegation