一个班级可以延伸吗?

时间:2018-06-07 12:13:13

标签: scala

我正在阅读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

1 个答案:

答案 0 :(得分:5)

它没有扩展自己。实际上,“扩展自身”没有任何意义,或者可以说所有课程都是自我扩展。

OneHotEncoderModel(...) extends Model[OneHotEncoderModel] with ...

表示OneHotEncoderModel扩展ModelModel使用OneHotEncoderModel进行类型参数化。此构造允许Model将实际的实现类作为类型参数并使用它。

例如,这可以在抽象的api中使用:

trait Model[A]{
  def join(other: A): A
}

此处,要成为Model子类,OneHotEncoderModel必须实施def join(other: OneHotEncoderModel): OneHotEncoderModel