当前位置: 首页 > news >正文

scala 样例类

文章目录

  • 前言
  • 1.主构造函数示例
  • 2.带辅助构造函数的样例类举例
  • 3.带默认参数的主构造函数 vs 辅助构造函数 举例
  • 其他举例


前言

提示:主要对基础的scala样例类使用做一些说明:


1.主构造函数示例

// 主构造函数样例类
case class Person(name: String, age: Int) {println(s"主构造函数创建:$name, $age岁")
}object Main1 {def main(args: Array[String]): Unit = {val p = Person("Alice", 25) // 自动调用主构造函数println(s"输出:${p.name}的年龄是${p.age}")}
}

输出:

主构造函数创建:Alice, 25岁
输出:Alice的年龄是25

2.带辅助构造函数的样例类举例

// 主构造函数+辅助构造函数
case class Book(title: String, author: String, price: Double) {// 辅助构造函数1(通过this定义)def this(title: String) = {this(title, "未知作者", 0.0)println(s"辅助构造函数1创建:仅标题《$title》")}// 辅助构造函数2def this(title: String, author: String) = {this(title, author, 50.0) // 必须优先调用主构造函数println(s"辅助构造函数2创建:《$title》- $author")}
}object Main2 {def main(args: Array[String]): Unit = {val b1 = Book("Scala编程")             // 调用辅助构造函数1val b2 = Book("Java核心", "James")     // 调用辅助构造函数2val b3 = Book("Python入门", "Guido", 39.9) // 调用主构造函数println(s"对比输出:\n" +s"b1: ${b1.title}|${b1.author}|${b1.price}\n" +s"b2: ${b2.title}|${b2.author}|${b2.price}\n" +s"b3: ${b3.title}|${b3.author}|${b3.price}")}
}

​​输出​​:

辅助构造函数1创建:仅标题《Scala编程》
辅助构造函数2创建:《Java核心》- James
对比输出:
b1: Scala编程|未知作者|0.0
b2: Java核心|James|50.0
b3: Python入门|Guido|39.9

3.带默认参数的主构造函数 vs 辅助构造函数 举例

代码如下(示例):

// 默认参数主构造函数
case class Student(name: String, grade: Int = 1, school: String = "第一中学") {println(s"主构造函数:$name 在 $school 读 $grade 年级")
}// 辅助构造函数版本
case class Teacher(name: String, subject: String, years: Int) {def this(name: String) = {this(name, "未分配科目", 0)   //注意这里调用主构造函数  println(s"辅助构造函数:新教师$name")}
}object Main3 {def main(args: Array[String]): Unit = {val s1 = Student("小明")                   // 使用默认参数val s2 = Student("小红", 3, "实验中学")     // 覆盖所有参数val t1 = new Teacher("张老师")             // 调用辅助构造函数val t2 = Teacher("李老师", "数学", 10)      // 调用主构造函数println(s"学生对比:${s1.grade} vs ${s2.grade}")println(s"教师对比:${t1.subject} vs ${t2.subject}")}
}

输出:

主构造函数:小明 在第一中学读1年级
主构造函数:小红 在实验中学读3年级
辅助构造函数:新教师张老师
学生对比:1 vs 3
教师对比:未分配科目 vs 数学

*​​辅助构造函数必须首行调用主构造函数或其他辅助构造函数​​(如 this(…)),这是 Scala 的强制语法规则.
强制调用顺序​​:
辅助构造函数的​​第一行代码​​必须调用主构造函数或其他已定义的辅助构造函数。若违反此规则,编译器会直接报错。
​​原因​​:Scala通过这种方式确保所有构造路径最终都会调用主构造函数,从而统一对象的初始化逻辑。
​​间接调用主构造函数​​:
即使辅助构造函数首次调用的是其他辅助构造函数,最终也必须通过链式调用传递到主构造函数。例如:

class Person(name: String) { // 主构造函数def this() = this("Anonymous")      // 辅助构造函数1 → 调用主构造函数def this(name: String, age: Int) = { // 辅助构造函数2 → 调用辅助构造函数1this() // 间接调用主构造函数println(s"Name: $name, Age: $age")}
}

其他举例

代码示例:    
case class Person(name: String, age: Int) {// 辅助构造函数1:仅接受name参数,age默认为0def this(name: String) = this(name, 0)// 辅助构造函数2:接受出生年份,动态计算年龄def this(birthYear: Int) = this("Unknown", 2025 - birthYear)
}
// 使用示例
val person1 = Person("Alice", 25)      // 主构造器               -重点
val person2 = new Person("Bob")        // 辅助构造器1(需用new)  -重点
val person3 = new Person(1990)         // 辅助构造器2(需用new)  -重点

举例另一种例子

case class Person(name: String, age: Int) {// 辅助构造函数:通过另一个Person对象初始化def this(other: Person) = this(other.name, other.age + 1)  // 年龄+1作为差异
}// 使用示例
val person1 = Person("Alice", 25)       // 主构造器
val person2 = new Person(person1)      // 辅助构造器(需用new)  -重点
println(person2)                       // 输出: Person(Alice,26)    
http://www.dtcms.com/a/324594.html

相关文章:

  • Spring的三层架构及其各个层用到注解详细解释。
  • 零基础学Java第三讲---运算符
  • android 使用openimagelib OpenImage 实现点击放大图片,浏览
  • 【Docker实战】Spring Boot应用容器化
  • 蓝牙认证流程:BQB 测试、互操作性验证与品牌授权指南 —— 面试高频考点与历年真题解
  • Bean的实例化方式
  • WinForm之TreeView控件
  • 深入解析React Diff 算法
  • 基于 InfluxDB 的服务器性能监控系统实战(三)
  • Windchill 11.0使用枚举类型自定义实用程序实现角色管理
  • Web API开发中的数据传输:MIME类型配置与编码最佳实践
  • vulnhub-Doubletrouble靶机
  • 医学统计(随机对照研究分类变量结局数据的统计策略3)
  • AI正自我觉醒!
  • C4.5算法:增益率(Gain Ratio)
  • 洛谷 P2404 自然数的拆分问题-普及-
  • 3.3keep-alive
  • Windows11 [Close Folder Shortcut]
  • vue2升级vue3:单文件组件概述 及常用api
  • Android Intent 解析
  • 【Linux】通俗易懂讲解-正则表达式
  • 从Redisson源码角度深入理解Redis分布式锁的正确实现
  • JetPack系列教程(三):Lifecycle——给Activity和Fragment装个“生命探测仪“
  • redis主从模型与对象模型
  • Beelzebub靶机练习
  • 代码随想录算法训练营第五十九天|图论part9
  • 下一代防火墙总结
  • 【软考中级网络工程师】知识点之 PPP 协议:网络通信的基石
  • Stlink识别不到-安装驱动
  • Hutool-RedisDS:简化Redis操作的Java工具类