我想设计一个类作为任何其他类的包装器。我们将这个包装类称为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 类本身公开?
最佳答案
正如评论和 Kevin's answer 中所建议的那样,尝试像这样使用隐式转换
object Hello extends App {
class Virtual[T](val delegate: T) {
def bar(i: Int): Int = i + 1
}
implicit def VirtualToDelegate[T](virtual: Virtual[T]): T = virtual.delegate
val str = "foo"
val virtual = new Virtual[String](str)
println(virtual.toUpperCase) // FOO
println(virtual.bar(7)) // 8
}
关于Scala:是否可以定义一个扩展其类参数的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55600654/