Won*_*nay 2 functional-programming scala return-current-type
当你有父母时:
abstract class Parent {
def something(arg: ???): Parent = ???
}
Run Code Online (Sandbox Code Playgroud)
和
class Child extends Parent {}
Run Code Online (Sandbox Code Playgroud)
我想
val updatedChild = new Child().something(...)
Run Code Online (Sandbox Code Playgroud)
updatedChild是类型Child而不是类型Parent,这可能吗?
一种方法是对父对象进行参数化:
abstract class Parent[T <: Parent[T]] {
def something(arg: Foo): T
}
class Child(val foo: String) extends Parent[Child] {
def something(arg: String) = return new Child(arg)
}
Run Code Online (Sandbox Code Playgroud)
有时,您也可以使用this.type:
class Parent {
def something(arg: Foo): this.type = this
}
class Child {
override def something(arg: Foo) = this
}
Run Code Online (Sandbox Code Playgroud)
但是后一种方法仅在您想要返回的所有内容是this(this.type不是Parentor Child,而是只有一个实例的特定类型 - this)时才有效。
| 归档时间: |
|
| 查看次数: |
705 次 |
| 最近记录: |