【发布时间】:2019-08-31 05:02:23
【问题描述】:
我想设计一个类来包装任何其他类。我们称这个包装类为Virtual,它的用法如下:
val x: String = "foo"
val y: Virtual[String] = new Virtual(x)
// any method that can be called on x can also be called on y,
// i.e., Virtual[String] <: String
// example:
y.toUpperCase // will change the wrapped string to an upper case
这是我目前所拥有的:
class Virtual[T](obj: T) extends T {
// any Virtual specific methods here
}
扩展类型参数似乎并不能解决问题...
换句话说: 如何保证被Virtual封装的类暴露的方法也被Virtual类本身暴露?
【问题讨论】:
-
我不认为你可以让
Virtual[T]自动实现T的方法,但是如果你所追求的是能够为你提供T的所有东西但让你添加一些更多方法,您可以使用 Scala 的隐式类。然后x将有效地拥有String的所有方法,以及您可能想要的任何其他方法。参见例如WrappedString(使用Predef.scala中的隐式转换方法而不是隐式类,但这是相同的想法)
标签: scala inheritance subclass