Scala Case类和对象

Scala是没有Java中的switch case语法的,相对应地,scala提供了更加强大的match case 语法,即模式piper,类替代switch case,match case也被称为模式匹配。

Scala的matach case与Java的switch case最大的不同点在于,java的switch case仅能匹配变量的值,比如1,2,3等;而scala的match case可以匹配各种情况,比如变量的类型、集合的元素、有值或无值。

Match case 的语法如下:

Scala Case类和对象

如果值为_下划线,则代表了不满足以上所有情况下的默认情况下如何处理。此外,match case中,只要一个case分支满足并处理了,就不会继续判断下一个case分支了,这点与Java不同,Java的switch case需要用break阻止。

Matach case语法最基本的应用,就是对变量的值进行模式匹配。

【案例:成绩评级】

Scala Case类和对象

在模式匹配中使用if守卫:scala的模式匹配语法,有一个特点在于,可以在Case后的条件判断中,不仅仅只是提供一个值,而是可以在值后面再加一个if守卫,进行双重过滤。

【案例:成绩评级(升级版)】

Scala Case类和对象

Case类知识常规类,默认情况下是不可变的,可以通过模式匹配分解。

它使用相等equal方法在结构上比较实例,不使用new关键字实例化对象。

默认情况下,case类中列出的所有参数默认使用public和immutable修饰符

【语法】

Scala Case类和对象

【scala case类实例】

Scala Case类和对象

将上面的代码保存到源文件Demo.scala中,使用以下命令变异并执行代码。

Scala Case类和对象

Case类支持模式匹配。所以,可以在模式中使用它。以下是Case类和模式的示例:

【Scala Case类和模式匹配示例】

没有参数的case类将被声明为case对象而不是case类。默认情况下,case对象是可序列化的。

Scala Case类和对象

将上面的代码保存到源文件Demo.scala中,使用以下命令编译并执行代码:

Scala Case类和对象

Scala中提供了一种特殊的类,用case class进行声明,中文也可以称作样例类。Case class其实有点类似于Java中的Javabean的概念。即只定义field,并且由scala编译时自动提供getter和setter方法,但是没有method.

Case class的主构造函数接收的参数通常不需要使用var或val修饰,scala自动就会使用val修饰,但是如果你自己使用var修饰,那么还是会按照var来定义。

Scala自动为case class定义了伴生对象,也就是object,并且定义了apply()方法,该方法接收主构造函数中相同的参数,并返回case class对象。

【案例:学校门禁】

Scala Case类和对象