簡體   English   中英

在Scala中,有沒有一種方法可以指定返回類型應該與方法調用者的類型匹配?

[英]In Scala is there a way to specify that the return type should match the type of the method caller?

例如,我有一個名為Foo的類

abstract class Foo {
    def f(): ??? = { ... }
}
class Bar extends Foo {
    ...
}
class Baz extends Foo {
    ...
}

我想要的是f由Bar調用時返回Bar的方法,而由Baz調用時返回Baz的方法。 Bar和Baz都具有相同的構造函數,因此f中的代碼兩次都相同,除了我必須說new Bar(...)還是new Baz(...)。 有什么辦法說新的TypeOfWhateverClassIsCallingMe(...)?

聽起來像您想要F界限類型。 但是,您仍然必須為所有子類實現它,因為父類不了解子構造函數(“哺乳動物”不知道如何制作“貓”)。

abstract class Foo[T <: Foo[T]] {
    def createMe(): T
}

class Bar extends Foo[Bar] {
    override def createMe() = new Bar
}

class Baz extends Foo[Baz] {
    override def createMe() = new Baz
}

這基本上為您提供了編譯時的安全性, Foo所有子級都需要實現一個創建自己類的方法。

這里深入討論。

假設您要調用該方法的具體子類的類型(我不會將其稱為“方法調用者的類型”,而是“被調用者的類型”),則可以執行

def f(): this.type = ???

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM