我正在尋找一種方法來定義返回類型T的方法,其中T =子類的類型。斯卡拉抽象類型代表類型的子類
我知道我可以使用抽象類型來做到這一點,但不喜歡爲每個子類重新定義T的開銷。
一些示例代碼:
object Helper {
def help[A <: MyClass](cls: A): Option[A] = { cls.foo() map { _.asInstanceOf[A] } }
}
class MyClass {
type T <: MyClass
def foo(): Option[T] = Some(this.asInstanceOf[T])
}
class ChildClass extends MyClass {
type T = ChildClass
}
可能是一個新的語言功能,使這更容易?或者我可以用某種方式使用this.type?對我來說,能夠定義一個可以以這種方式調用foo的助手類對我很重要。
任何機會你可以指向一些特定的語法,因爲我需要完全按照(使用類型參數)編寫Helper.help? this.type不匹配A?另外,請注意我需要返回Option [this.type],並且def foo:Option [this.type] =有些(this)似乎沒有編譯。謝謝你的幫助! –
@Pandora Singleton類型永遠不會被推斷出來,你必須明確地指定它:'Some [this.type](this)'。 –
非常感謝!我遇到了另一個小故障,因爲我的foo函數實際上調用另一個對象的靜態方法 - >如果您有洞察力,請在這裏跟進問題:) http://stackoverflow.com/questions/6886182/scala-this- type-conformance-to-type-parameter-bounds-super-type –