Mik*_*yer 7 inheritance types scala
有没有办法让方法总是返回调用它的同一个类的类型?
让我解释:
class Shape {
var mName: String = null
def named(name: String): Shape = {
mName = name
this
}
}
class Rectangle extends Shape {
override def named(name: String): Rectangle = {
super.named(name)
this
}
}
Run Code Online (Sandbox Code Playgroud)
这是有效的,但有没有办法在不必覆盖named所有子类中的函数的情况下执行此操作?我正在寻找这样的东西(不起作用):
class Shape {
var mName: String = null
def named(name: String): classOf[this] = { // Does not work but would be great
mName = name
this
}
}
class Rectangle extends Shape {
}
Run Code Online (Sandbox Code Playgroud)
任何的想法 ?还是不可能?
Ken*_*oom 18
你需要使用this.type而不是classOf[this].
class Shape {
var mName: String = null
def named(name: String): this.type = {
mName = name
this
}
}
class Rectangle extends Shape {
}
Run Code Online (Sandbox Code Playgroud)
现在来证明它的工作原理(在Scala 2.8中)
scala> new Rectangle().named("foo")
res0: Rectangle = Rectangle@33f979cb
scala> res0.mName
res1: String = foo
Run Code Online (Sandbox Code Playgroud)
this.type是一个编译类型的类型名称,classOf而是一个在运行时被调用以获取java.lang.Class对象的运算符.您不能classOf[this]永远使用,因为参数需要是类型名称.尝试获取java.lang.Class对象时,您的两个选项是调用classOf[TypeName]或this.getClass().
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |