📜  斯卡拉 |案例类和案例对象(1)

📅  最后修改于: 2023-12-03 15:10:24.493000             🧑  作者: Mango

斯卡拉 | 案例类和案例对象

案例类

在Scala中,案例类是一种特殊的类,用于通过模式匹配来处理数据。它们可以自动生成equals和hashCode方法,并提供方便的复制方法。

案例类的语法如下:

case class MyClass(param1: String, param2: Int)

使用案例类的主要好处是,我们可以很容易地匹配它们的属性值,而不需要显式比较每个属性。

案例对象

在Scala中,案例对象是指单例的实例,通常用于代表一些常量或作为工具类的替代品。和案例类一样,它们可以使用模式匹配。

案例对象的语法如下:

case object MySingleton

使用案例对象的好处是,我们不需要创建多个实例,可以直接使用单例来调用方法或访问属性。

示例

以下是一个使用案例类和案例对象的示例:

trait Shape
case class Rectangle(width: Double, height: Double) extends Shape
case class Circle(radius: Double) extends Shape
case object UnknownShape extends Shape

def calculateArea(shape: Shape): Double = shape match {
  case Rectangle(w, h) => w * h
  case Circle(r) => Math.PI * r * r
  case UnknownShape => 0.0
}

val rect = Rectangle(5, 10)
val circle = Circle(2.5)
val unknown = UnknownShape

assert(calculateArea(rect) == 50.0)
assert(calculateArea(circle) == Math.PI * 2.5 * 2.5)
assert(calculateArea(unknown) == 0.0)

上述示例定义了一个图形接口和三个具体的图形实现:矩形、圆和未知形状。它使用模式匹配来计算每个具体形状的面积。还定义了一个单例UnknownShape,用于表示未知的形状。在示例中,我们创建了一个矩形、一个圆和一个未知形状,并使用calculateArea函数来计算它们的面积。

使用案例类和案例对象可使代码更易于阅读、维护和扩展。它们是Scala的重要特性,值得掌握和使用。