Scala の封印されたトレイト

Mohammad Irfan 2023年6月21日
Scala の封印されたトレイト

このチュートリアルでは、Scala での実行例を使用して、封印された特性について説明します。

Scala の封印されたトレイト

Scala のトレイトは Java のインターフェースに似ており、クラス間でデータを共有するために使用されます。 クラスはインスタンス化できますが、トレイトはインスタンス化できません。

Scala では、継承を制限するために、クラスと同様にトレイトをシール済みとしてマークできます。 封印された特性とすべてのサブタイプを同じファイルで宣言して、すべてのサブタイプが確実に認識されるようにする必要があります。

特性を定義するには、次のように trait キーワードを使用します。

trait Runnable

同様に、封印された特性を作成するには、次のように sealed クラスを使用します。

sealed trait Runnable

キーポイント:

  • 封印された特性は、同じファイル内でのみ拡張できます。
  • コンパイラは、考えられるすべてのサブタイプを容易に認識します。
  • 可能なサブタイプの数が有限であり、事前にわかっている場合にのみ、封印された特性を使用することをお勧めします。

Scala で Sealed Trait を作成する

Scalaでsealed traitを作って理解しよう。

import scala.collection.mutable.ArrayBuffer

sealed trait Color {
    val name: String
}

class Black(val name: String) extends Color
class Red(val name: String) extends Color

object MyClass {
    def main(args: Array[String]) {
        val black = new Black("Black")
        val red = new Red("Red")
        val animals = ArrayBuffer.empty[Color]

        animals.append(black)
        animals.append(red)
        animals.foreach(color => println("Color Name: "+color.name))
    }
}

出力:

Color Name: Black
Color Name: Red