标签:表达 vararg 推导 级别 throw 绑定 sam ocs code
def
定义的是方法,而不是函数_
后缀将普通方法变为函数: ceil _
_
后缀_
简写switch
,默认分支为 case _
;可避免 switch
语句中因缺少 break
带来的 fall-through
问题Boolean
条件都可作为模式守卫;case ... if ... => ...
case
关键字后接变量名或对应数据结构中使用变量名,那么匹配项就赋值给该变量,变量名必须以小写字母开头|
分隔同一匹配的多个可选项,此时不可使用变量绑定元素isInstanceOf
和 asInstanceOf
,直接进行类型转换
Map
类型(可使用 case Map[_, _]
,不可使用 case Map[Int, Int]
)Array
的类型不会被擦除匹配数组
case Array(x, y) => s"$x $y" // 匹配长度为2的数组,并将分别绑定到 x, y
case Array(0, rest @ _*) => rest.min // 可变参数
匹配 List
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
处理基础类型,自动生成基础类型对应包装类的方法标签:表达 vararg 推导 级别 throw 绑定 sam ocs code
原文地址:https://www.cnblogs.com/yuanzam/p/11614233.html