圆形(Circle)和矩形(Rectangle)两个样例类

scala 复制代码
object case05 {
  /*
    match case 高阶匹配
    1. 匹配元组不同的元素的数量
    2. 匹配数组特殊值
    3. 匹配变量的类型
    4. 匹配样例类(属性值)
   */

  // 1. 圆形类
  case class Circle(radius: Double) {}
  // 2. 矩形类
  case class Rectangle(width: Double, height: Double) {}

  // 封装一个求面积的方法
  def getArea(shape: Any): Double = {
    shape match {
      case Circle(radius) => math.Pi * radius * radius
      case Rectangle(width, height) => width * height
      case _ => 0.0
    }
  }

  def main(args: Array[String]): Unit = {
    // 1. 实例化圆形对象
    val circle = Circle(2.0)
    // 2. 实例化矩形对象
    val rectangle = Rectangle(2.0, 3.0)

    println(getArea(circle))
    println(getArea(rectangle))
  }
}
  • case class 是 Scala 特有的样例类,专门用于模式匹配,相比普通类有几个核心特性:

    • 自动生成构造器、equals/hashCode方法,无需手动写;
    • 支持直接在模式匹配中提取属性值(比如后面的case Circle(radius));
    • 实例化时不需要new关键字(比如val circle = Circle(2.0))。
  • Circle(radius: Double):定义圆形类,只有一个属性radius(半径),类型为浮点型;

  • Rectangle(width: Double, height: Double):定义矩形类,有两个属性width(宽)、height(高)

2. 面积计算方法 getArea

scala

arduino 复制代码
// 封装一个求面积的方法
def getArea(shape: Any): Double = {
  shape match {
    case Circle(radius) => math.Pi * radius * radius
    case Rectangle(width, height) => width * height
    case _ => 0.0
  }
}
  • def getArea(shape: Any): Double:定义方法,参数shape类型为Any(Scala 的根类型,能接收任意类型),返回值为Double(浮点型);

  • shape match:对传入的shape对象进行模式匹配,类似 Java 的switch,但功能远更强;

    • case Circle(radius):如果传入的是Circle对象,自动提取其radius属性 ,然后执行右侧逻辑:圆形面积公式 π × 半径²math.Pi是 Scala 内置的圆周率常量);
    • case Rectangle(width, height):如果传入的是Rectangle对象,提取widthheight,执行矩形面积公式 宽 × 高
    • case _:通配符,匹配所有未命中的情况(比如传入非图形对象),返回 0.0。

3. 主函数(程序入口)

scala

scss 复制代码
def main(args: Array[String]): Unit = {
  // 1. 实例化圆形对象
  val circle = Circle(2.0)
  // 2. 实例化矩形对象
  val rectangle = Rectangle(2.0, 3.0)

  println(getArea(circle))
  println(getArea(rectangle))
}
  • main方法是 Scala 程序的入口,args: Array[String]接收命令行参数,Unit表示无返回值;
  • val circle = Circle(2.0):创建半径为 2.0 的圆形对象(样例类无需new);
  • val rectangle = Rectangle(2.0, 3.0):创建宽 2.0、高 3.0 的矩形对象;
  • println(getArea(circle)):调用面积方法计算圆形面积并打印;
  • println(getArea(rectangle)):调用面积方法计算矩形面积并打印。

运行结果说明

执行这段代码会输出:

plaintext

ini 复制代码
12.566370614359172  // 圆形面积:π×2² ≈ 3.14159×4 = 12.566...
6.0                  // 矩形面积:2×3 = 6

总结

  1. 核心知识点:Scala 的样例类(case class) 专为模式匹配设计,能便捷提取对象属性;
  2. 模式匹配优势:相比 Java 的switch,可以匹配对象类型 + 提取属性,代码更简洁;
  3. 逻辑核心:通过match case区分不同图形类型,调用对应公式计算面积,未匹配类型返回 0.0。
相关推荐
信创天地5 分钟前
核心系统去 “O” 攻坚:信创数据库迁移的双轨运行与数据一致性保障方案
java·大数据·数据库·金融·架构·政务
mjhcsp7 分钟前
C++ AC 自动机:原理、实现与应用全解析
java·开发语言·c++·ac 自动机
huihuihuanhuan.xin8 分钟前
后端八股之java并发编程
java·开发语言
茶本无香12 分钟前
设计模式之二—原型模式:灵活的对象克隆机制
java·设计模式·原型模式
寻星探路12 分钟前
【算法通关】双指针技巧深度解析:从基础到巅峰(Java 最优解)
java·开发语言·人工智能·python·算法·ai·指针
小北方城市网21 分钟前
微服务接口设计实战指南:高可用、易维护的接口设计原则与规范
java·大数据·运维·python·微服务·fastapi·数据库架构
什么都不会的Tristan26 分钟前
HttpClient
java·微信登录
隐退山林27 分钟前
JavaEE:多线程初阶(二)
java·开发语言·jvm
乌暮28 分钟前
JavaEE初阶---《JUC 并发编程完全指南:组件用法、原理剖析与面试应答》
java·开发语言·后端·学习·面试·java-ee
6***A66331 分钟前
SpringSecurity+jwt实现权限认证功能
java