在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
方法,使用构造函数参数设置它,然后使用模式匹配来获取桥:Road
Any
BridgeCauseway
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)
归档时间: |
|
查看次数: |
6154 次 |
最近记录: |