我正在阅读Spark的源代码.我看到似乎一个类扩展了自己.
我的问题:它是否会延伸?如果是这样,它叫什么?我们为什么这样做?
class OneHotEncoderModel private[ml] (
@Since("2.3.0") override val uid: String,
@Since("2.3.0") val categorySizes: Array[Int])
extends Model[OneHotEncoderModel] with OneHotEncoderBase with MLWritable
Run Code Online (Sandbox Code Playgroud)
它没有扩展自己.实际上,"扩展自身"没有任何意义,或者可以说所有类都扩展了它们自己.
OneHotEncoderModel(...) extends Model[OneHotEncoderModel] with ...
Run Code Online (Sandbox Code Playgroud)
意味着OneHotEncoderModel延伸Model.并且Model是用类型参数化的OneHotEncoderModel.此构造允许Model将实际的实现类作为类型参数并使用它.
例如,这可以在抽象API中使用:
trait Model[A]{
def join(other: A): A
}
Run Code Online (Sandbox Code Playgroud)
在这里,要成为一个Model子类,OneHotEncoderModel必须要实现def join(other: OneHotEncoderModel): OneHotEncoderModel
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |