在Scala中是否可以编写如下内容:
trait Road {
...
}
class BridgeCauseway extends Road {
// implements method in Road
}
class Bridge extends Road {
val roadway = new BridgeCauseway()
// delegate all Bridge methods to the `roadway` member
}
Run Code Online (Sandbox Code Playgroud)
或者我是否需要逐个实现每个Road方法,并调用相应的方法roadway?
Rex*_*err 18
完成此操作的最简单方法是使用隐式转换而不是类扩展:
class Bridge { ... }
implicit def bridge2road(b: Bridge) = b.roadway
Run Code Online (Sandbox Code Playgroud)
只要你不需要Bridge携带原件(例如你要存放Bridge在一个集合中Road).
如果确实需要Bridge再次返回,可以添加一个返回an 的owner方法,使用构造函数参数设置它,然后使用模式匹配来获取桥:RoadAnyBridgeCauseway
trait Road {
def owner: Any
...
}
class BridgeCauseway(val owner: Bridge) extends Road { . . . }
class Bridge extends Road {
val roadway = new BridgeCauseway(this)
...
}
myBridgeCauseway.owner match {
case b: Bridge => // Do bridge-specific stuff
...
}
Run Code Online (Sandbox Code Playgroud)