scala – 使用子类参数覆盖子类方法?
发布时间:2020-12-16 19:01:03 所属栏目:安全 来源:网络整理
导读:当由子类覆盖时,如何强制基本方法接受相同的特定子类实例? 即: abstract class Animal { def mateWith(that: Animal)}class Cow extends Animal { override def mateWith...?} 从逻辑上讲,牛应该只能与另一头牛交配.但是,如果我覆盖def mateWith(that:Cow
当由子类覆盖时,如何强制基本方法接受相同的特定子类实例?
即: abstract class Animal { def mateWith(that: Animal) } class Cow extends Animal { override def mateWith...? } 从逻辑上讲,牛应该只能与另一头牛交配.但是,如果我覆盖def mateWith(that:Cow),这实际上并没有覆盖基类方法(我想要它,因为我想强制它在子类中存在)??. 我可以检查以确保其他实例是Cow类型,并且如果不是则抛出异常 – 这是我最好的选择吗?如果我有更多的动物怎么办?我将不得不重复抛出异常的代码. 解决方法abstract class Animal[T <: Animal[T]] { def mateWith(that: T) } class Cow extends Animal[Cow] { override def mateWith(that: Cow) { println("cow") } } class Dog extends Animal[Dog] { override def mateWith(that: Dog) { println("dog") } } 并像这样使用它: scala> (new Cow).mateWith(new Cow) cow scala> (new Cow).mateWith(new Dog) <console>:17: error: type mismatch; found : Dog required: Cow (new Cow).mateWith(new Dog) ^ 不需要抛出异常代码;类型系统在编译时为您处理它! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |