Scala样例类

文章目录


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()方法

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

猜你喜欢

转载自blog.csdn.net/zh2475855601/article/details/114766136