認可我想一個類來迫使它的子類實現子性狀的性狀,並試圖此:自助式註釋不被編譯器
sealed trait TA
sealed trait TB extends TA
sealed trait TC extends TA
sealed trait CA {
this: TA =>
}
final class CB extends CA with TB
final class CC extends CA with TC
def ca: CA = if (scala.util.Random.nextBoolean) new CB()
else new CC()
def ta: TA = ca
有了下面的代碼,我得到以下編譯器錯誤:
Error:(16, 16) type mismatch;
found : CA
required: TA
def ta: TA = ca
- 難道一個CA不是一個TA時,我有自己類型的註釋:「這樣的:TA =>」或者這是在編譯器故障?
- 有更好的方法來實現這個嗎?
我想要一個類(CA)來強制它的子類(CB和CC)實現特徵TA的子類型(TB或TC)。我有一個方法返回一個CA,我想在需要類的TA方面的情況下重用。 如果我有CA擴展TA,如果子類不擴展TA或TB,它將不會是編譯器錯誤。 有趣的是,編譯器接受:def ca:TA = if(scala.util.Random.nextBoolean)new CB()else new CC() – user6919872
當然,它接受它,因爲CB和CC都是TA的子類。 CA不是。你不強迫你的子類用你的方法實現TA的一個子類。他們仍然可以延長TA本身。 – Dima