这个问题有点难以总结。以下代码块显示了我想要做的事情。 我有这样一个基类:
<div>
<img src="cid:{0}" />
<img src="cid:{1}" />
<img src="cid:{2}" />
</div>
我还有一个派生类,我希望每个子类方法调用超类方法两次,比较结果并在不匹配时抛出异常(这是针对测试场景)。
但如果我写
`class Base {
def methA:String="ook"
def methB:Int=1
}
然后这将无法编译。解决这个问题的唯一方法就是在类 Derived 中提取一个方法,它只调用超类' methB 并从lambda调用中调用它。
有更好的方法吗?
答案 0 :(得分:1)
我知道你想打电话给超级电话。希望下面是你想要的。
您可以使用关键字super
(new Derived).methB
。这将根据您的代码在callDoublyAndCompare
中调用两次超级调用方法。
class Derived extends Base {
private def callDoublyAndCompare[T](fun:()=>T) : T = {
val fst=fun()
val snd=fun()
if(fst!=snd) throw new RuntimeException(s"Mismatch fst=$fst != snd=$snd")
snd
}
override def methB:Int={
callDoublyAndCompare(() => super.methB) //kept only super
}
}
答案 1 :(得分:0)
原始示例并非完全完整,因为Derived类被定义为另一个scala类的内部类。 在我把这个内部课程移到顶层之后,上面的Praveen的例子突然起作用了。