[英]Override trait's generic method without casting
我計划有一個具有“value”屬性的特性,可以通過多個類進行擴展。 然后我需要能夠比較彼此之間的特征的不同實例。 首先,我想檢查在特征上定義的值 - 如果在兩個實例中相同,那么我想觸發特定於子的方法,該方法將相同類型的兩個子實例相互比較。
我希望我能夠清楚地解釋清楚......
我編寫了下面的代碼,但是ChildOne類沒有編譯 - 我得到的錯誤:
class 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...
}
}
我可以將child的方法的參數更改為ParentType,然后將其強制轉換,但我想避免這種情況,我想知道是否有更好的方法來實現我想要實現的目標?
任何幫助贊賞。
您在ParentType
聲明了一個抽象類型 T,而沒有在ChildOne
覆蓋它。 你可以通過覆蓋ChileOne
T來輕松解決這個ChileOne
:
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...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.