认可我想一个类来迫使它的子类实现子性状的性状,并试图此:自助式注释不被编译器
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