首页 > 解决方案 > 一个类可以扩展自己吗?

问题描述

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

标签: scala

解决方案


它不是在扩展自己。实际上,“扩展自身”没有任何意义,或者可以说所有类都扩展了它们自己。

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


推荐阅读