我打算在"价值"可以由多个类扩展的属性。然后我需要能够比较彼此之间的特征的不同实例。首先,我想检查特征上定义的值 - 如果在两个实例中相同,那么我想触发特定于子的方法,该方法将相同类型的两个子实例相互比较。
我希望我能够清楚地解释清楚......
我编写了以下代码,但是ChildOne类没有编译 - 我得到的错误:
类ChildOne需要是抽象的,因为方法childCheck in trait ParentType类型(其他:ChildOne.this.T)未定义布尔值 (注意ParentType.this.T与com.cards.ChildOne不匹配)
trait ParentType {
val value: Int
type T <: ParentType
def parentCheck(other: T): Boolean = {
if (this.value == other.value) childCheck(other)
else this.value > other.value
}
def childCheck(other: T): Boolean
}
case class ChildOne(name: String) extends ParentType {
val value = 1
override def childCheck(other: ChildOne): Boolean = {
true //some custom logic for each child...
}
}
我可以将子方法的参数更改为ParentType,然后将其转换,但我想避免这种情况,我想知道有没有更好的方法来实现我想要实现的目标?
任何帮助表示感谢。
答案 0 :(得分:4)
您在ParentType
中声明抽象类型 T,而不在ChildOne
中覆盖它。您可以通过覆盖ChileOne
中的T来轻松解决此问题:
case class ChildOne(name: String) extends ParentType {
val value = 1
override type T = ChildOne // <----
override def childCheck(other: ChildOne): Boolean = {
true //some custom logic for each child...
}
}