クラスの 2 つのインスタンスを比較する演算子を持つ抽象クラスを定義しようとしています。ただし、クラスを具体化するときは、メソッドで同じ型のインスタンスのみを比較する必要があります。このようなもの
abstract class ComparableSuper{
def <(other: ComparableSuper): Boolean
def <=(other: ComparableSuper): Boolean
def >(other: ComparableSuper): Boolean
def >=(other: ComparableSuper): Boolean
}
class Comparable (val a: Int) extends ComparableSuper {
def <(other: Comparable): Boolean = this.a < other.a
def >(other: Comparable): Boolean = this.a > other.a
def <=(other: Comparable): Boolean = this.a <= other.a
def >=(other: Comparable): Boolean = this.a >= other.a
}
もちろん、抽象クラスのメソッドをオーバーライドしていないため、このコードはコンパイルされません。ただし、メソッドで Comparable を ComparableSuper に変更すると、フィールド a がそこにあるという保証はありません。
メソッド署名でクラスの型を指定する方法はありますか?
前もって感謝します。