私は最近、次のように2つのサブクラス(EmptySetとNonEmptySet)を持つintセット「IntSet」を表す抽象クラスを作成する「Scala by Example」という本を読んでいます。
abstract class Stack[A] {
def push(x: A): Stack[A] = new NonEmptyStack[A](x, this)
def isEmpty: Boolean
def top: A
def pop: Stack[A]
}
class EmptyStack[A] extends Stack[A] {
def isEmpty = true
def top = error("EmptyStack.top")
def pop = error("EmptyStack.pop")
}
class NonEmptyStack[A](elem: A, rest: Stack[A]) extends Stack[A] {
def isEmpty = false
def top = elem
def pop = rest
}
私の質問は次のとおりです。空のコンテナーと空でないケースの両方を処理する 1 つの具体的なクラスを作成する代わりに、空のコンテナーを独自のクラスとして表すというこのパラダイムはどの程度役立ちますか?