Eri*_*rik 16 overriding scala final
最终方法不能在子类中重写.但有了Scala的魔力,似乎这是可能的.
请考虑以下示例:
trait Test {
final def doIt(s: String): String = s
}
object TestObject extends Test {
def doIt: String => String = s => s.reverse
}
Run Code Online (Sandbox Code Playgroud)
该方法doIt中的对象TestObject具有不相同的签名doIt中的性状Test.因此doIt重载而不是重写.但正常调用doIt始终调用方法TestObject:
val x = TestObject.doIt("Hello") //> x : String = olleH
Run Code Online (Sandbox Code Playgroud)
问:
我怎样才能调用原始的方法doIt上TestObject.这是可能的还是这种方法"有点被覆盖"?
sen*_*nia 15
您可以使用TestObject为Test这样的:
(TestObject: Test).doIt
Run Code Online (Sandbox Code Playgroud)
另一个有点hackisch方式是使用这样的命名参数调用doIt:
val x = TestObject.doIt(s = "Hello")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4529 次 |
| 最近记录: |