【发布时间】:2015-03-06 01:44:09
【问题描述】:
我有一个部分处理类型层次结构的程序。我在这里想要实现的只是让'oldType' def 使用我从 Java 中习惯的协变返回类型特性。
trait NumericMember extends NumericTypedef{ }
trait Type
trait NumericType extends Type
trait Typedef { def oldType : Type }
class TypedefImpl extends Typedef {
//can't use a val since it will get overriden
def oldType : Type = ???
}
trait NumericTypedef extends Typedef with NumericType {
abstract override def oldType : NumericType = super.oldType.asInstanceOf[NumericType]
}
class NumericTypedefImpl extends TypedefImpl with NumericTypedef{ }
class NumericMemberImpl extends NumericMember {
private val autoType = new NumericTypedefImpl
override def oldType: NumericType = autoType.oldType
}
编译器盲目地告诉我 NumericMemberImpl 中的 oldType 需要是一个抽象覆盖,然后当我服从它时改变主意,发现 NumericMemberImpl 实际上是一个类。
我可能在这里走错了路,因为我意识到抽象覆盖用于堆叠特征。当我只想拥有 oldType 的通用和专用返回值时。
帮忙,有人吗?
【问题讨论】:
标签: scala