欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Scala样例类

程序员文章站 2022-06-14 16:57:48
...

文章目录


1.概述

在Scala中, 样例类是一种特殊类,一般是用于保存数据的(类似于Java POJO类), 在并发编程以及Spark、Flink这些框架中都会经常使用它。

2.格式

case class 样例类名([var/val] 成员变量名1:类型1, 成员变量名2:类型2, 成员变量名3:类型3){}
  • 变量修饰符可以不写,如果不写,则默认的修饰符是val
  • 如果要实现某个成员变量值可以被修改,则需手动添加var来修饰此变量

3.案例

需求:

  • 定义样例类Person,包含姓名和年龄这两个成员变量.

    其中: 姓名用val修饰, 年龄用var修饰

  • 在测试类中创建Person类的对象, 并打印它的属性值.

  • 尝试修改姓名, 年龄这两个成员变量的值, 并观察结果.

代码:

object demo {
  //1. 创建一个Person样例类, 属性为: 姓名, 年龄.
  case class Person(name:String = "张三",var age:Int = 23) {}

  def main(args: Array[String]): Unit = {
    //2. 创建Person类型的对象, 然后打印属性值.
    val p = new Person()
    println(p)
    //3. 尝试修改对象p的属性值
    //p.name = "李四"     //这样写会报错, 因为样例类的成员变量默认修饰符是: val
    p.age = 24
    println(p)
  }
}

4.样例类中的默认方法

当我们定义一个样例类后,编译器会自动帮助我们生成一些方法, 常用的如下:

  • apply()方法
  • toString()方法
  • equals()方法
  • hashCode()方法
  • copy()方法
  • unapply()方法

功能详解:

  • apply()方法

    • 可以让我们快速地使用类名来创建对象, 省去了new这个关键字
    • 例如: val p = Person()
  • toString()方法

    • 可以让我们通过输出语句打印对象时, 直接打印该对象的各个属性值.
    • 例如: println(p) 打印的是对象p的各个属性值, 而不是它的地址值
  • equals()方法

    • 可以让我们直接使用==来比较两个样例类对象的所有成员变量值是否相等.
    • 例如: p1 == p2 比较的是两个对象的各个属性值是否相等, 而不是比较地址值
  • hashCode()方法

    • 用来获取对象的哈希值的. 即: 同一对象哈希值肯定相同, 不同对象哈希值一般不同.
  • 例如:

    val p1 = new Person("张三", 23)
    val p2 = new Person("张三", 23)
    println(p1.hashCode() == p2.hashCode())		//结果为: true
    
  • copy()方法

  • 可以用来快速创建一个属性值相同的实例对象,还可以使用带名参数的形式给指定的成员变量赋值.

  • 例如:

    val p1 = new Person("张三", 23)
    val p2 = p1.copy(age = 24)
    println(p1)		//结果为: 张三, 23
    println(p2)		//结果为: 张三, 24
    
  • unapply()方法

    • 一般用作提取器, 但是它需要一些铺垫知识, 我们暂时还没学到, 在后续章节详细解释.
相关标签: Scala