我有一组如下对象:
abstract class RecordType[T <: Record]
object RecordType1 extends RecordType[Record1]
object RecordType2 extends RecordType[Record2]
...
我想以下列方式使用它们,即每个RecordX
都有def recordType: RecordType[RecordX]
,但我无法弄清楚正确的语法(假设这是可能的):
abstract class Record {
def recordType: RecordType[this.type]
}
class Record1 extends Record {
override def recordType: RecordType[Record1] = RecordType1
}
class Record2 extends Record {
override def recordType: RecordType[Record2] = RecordType2
}
...
这会产生覆盖方法具有不兼容类型的错误。
我已尝试以下作为起点/妥协
abstract class Record {
def recordType[T <: Record]: RecordType[T]
}
class Record1 extends Record {
override def recordType: RecordType[Record1] = RecordType1
}
但这会产生错误
type mismatch;
[error] found : RecordType1.type
[error] required: RecordType[Record1]
有没有办法实现第一个目标,即要求每个Subclass
返回RecordType[Subclass]
,或者禁止有办法修复第二组代码?
答案 0 :(得分:2)
您的解决方案是解决此问题的标准方法之一。另一种是使用类型成员:
abstract class Record {
type ThisType <: Record
def recordType: RecordType[ThisType]
}
class Record1 {
type ThisType = Record1
override def recordType: RecordType[Record1] = RecordType1
}
答案 1 :(得分:0)
我想我可能找到了解决方案:
abstract class RecordType[T <: Record[T]]
object RecordType1 extends RecordType[Record1]
abstract class Record[T <: Record[T]] {
def recordType: RecordType[T]
}
class Record1 extends Record[Record1] {
override def recordType: RecordType[Record1] = RecordType1
}