我正在阅读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
答案 0 :(得分:5)
它没有扩展自己。实际上,“扩展自身”没有任何意义,或者可以说所有课程都是自我扩展。
OneHotEncoderModel(...) extends Model[OneHotEncoderModel] with ...
表示OneHotEncoderModel
扩展Model
。 Model
使用OneHotEncoderModel
进行类型参数化。此构造允许Model
将实际的实现类作为类型参数并使用它。
例如,这可以在抽象的api中使用:
trait Model[A]{
def join(other: A): A
}
此处,要成为Model
子类,OneHotEncoderModel
必须实施def join(other: OneHotEncoderModel): OneHotEncoderModel