def
定義的是方法,而不是函數_
後綴將普通方法變爲函數: ceil _
_
後綴_
簡寫switch
,默認分支爲 case _
;可避免 switch
語句中因缺乏 break
帶來的 fall-through
問題Boolean
條件均可做爲模式守衛;case ... if ... => ...
case
關鍵字後接變量名或對應數據結構中使用變量名,那麼匹配項就賦值給該變量,變量名必須以小寫字母開頭|
分隔同一匹配的多個可選項,此時不可以使用變量綁定元素isInstanceOf
和 asInstanceOf
,直接進行類型轉換
Map
類型(可以使用 case Map[_, _]
,不可以使用 case Map[Int, Int]
)Array
的類型不會被擦除匹配數組html
case Array(x, y) => s"$x $y" // 匹配長度爲2的數組,並將分別綁定到 x, y case Array(0, rest @ _*) => rest.min // 可變參數
匹配 List
java
case x :: y :: Nil => ... // 綁定參數 case head :: tail => ... // 解構 head , tail
匹配元組數組
case (0, _) => ... // 匹配第一個元素爲0 case (x, y) => ... // 綁定參數
match
模式匹配加上賦值操做
val (x, y) = (1, 2)
val Array(f, s, rest @ _*) = arr
用於 for
循環遍歷集合,匹配符合條件的元素安全
for ((k, v) <- System.getProperties()) println(s"$k $v") // 匹配 value 爲 "" 的項,其餘的則被忽略 for ((k, "") <- System.getProperties()) println(k) // if guard 過濾 for ((k, v) <- System.getProperties() if v == "") println(k)
val
,默認提供 apply
、unapply
、toString
、equals
、hashCode
、copy
copy
用於複製對象時,可以使用命名參數來修改屬性case class X
使用時 case X() => ...
,須要括號case object S
單例,使用時 case S => ...
, 不要括號::
也是 case class,配合中綴表達式,就是常見的匹配方式,case head :: tail
,實際調用 ::(head, tail)
List
等sealed
密封的
Option
也是使用 case class 來表示是否有值存在的
Some
封裝值,子類 None
表示無值""
或 null
更加安全Map
進行 get
操做返回的也是 Option
,也可以使用模式匹配來處理getOrElse
嘗試獲取值,未獲取到則使用給定的值apply
從模式匹配中計算函數值,isDefinedAt
判斷輸入是否匹配定義的模式case
語句塊是偏函數PartialFunction[A, B]
的實例, A
爲輸入類型,B
爲輸出類型
lift
方法,將偏函數變爲常規函數,返回值爲 Option[B]
Function.unlift
將返回 Option[B]
的函數變爲偏函數Seq[A]
也是偏函數 PartialFunction[Int, A]
Map[K, V]
也是偏函數 PartialFunction[K, V]
catch
語句也是偏函數,可在 catch
塊中使用模式匹配處理異常@BeanProperty
會自動生成 getter/setter
class Credential @Inject() (var username: String, var password: String)
(map.get(key): @unchecked) ...
class Test[@specialized T]
def name: String @Localized
Annotation
TypeAnnotation
@param
, @field
, @getter
, @setter
, @beanGetter
, @beanSetter
@volatile
對應 volatile
關鍵字@transient
對應 transient
關鍵字@strictfp
對應 strictfp
關鍵字@native
對應 native
關鍵字@cloneable
對應 Cloneable
@remote
對應 java.rmi.Remote
@SerialVersionUID
代替序列化字段@throws(classOf[Exception])
來處理 Java 中的受檢異常@varargs
處理可變參數
@varargs def name(args: String*)
生成 void name(String... args)
@varargs
則可變參數會被轉換成 Seq[T]
@tailrec
會嘗試優化尾遞歸調用,將其變爲循環@switch
編譯器會檢查 match
表達式是否編譯爲 ableswitch
或 lookupswitch
,若是被編譯成一系列條件表達式,則會拋出異常@inline
, @noinline
建議編譯器是否將方法替換爲行內調用@elidable
, 用於標註在生產代碼中可移除的方法
elidable
對象定義了不少級別常量可直接使用,未指定參數時默認是 SERVERE
即 1000(包含1000)@specialized
處理基礎類型,自動生成基礎類型對應包裝類的方法