有没有办法让方法总是返回调用它的同一个类的类型?
让我解释一下:
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
}
}
这有效,但有没有办法在不必覆盖所有子类中的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 {
}
有什么想法吗?或者是不可能的?
答案 0 :(得分:18)
您需要使用this.type
代替classOf[this]
。
class Shape {
var mName: String = null
def named(name: String): this.type = {
mName = name
this
}
}
class Rectangle extends Shape {
}
现在证明它有效(在Scala 2.8中)
scala> new Rectangle().named("foo")
res0: Rectangle = Rectangle@33f979cb
scala> res0.mName
res1: String = foo
this.type
是编译类型类型名称,而classOf
是在运行时调用以获取java.lang.Class
对象的运算符。您不能永远使用classOf[this]
,因为参数必须是类型名称。尝试获取java.lang.Class
对象时,您的两个选项是拨打classOf[TypeName]
或this.getClass()
。