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
解决方案
它不是在扩展自己。实际上,“扩展自身”没有任何意义,或者可以说所有类都扩展了它们自己。
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
推荐阅读
- javascript - 失败的道具类型:道具`options`在`signupCheckBoxes`中标记为必填,但其值为`undefined`
- html - 从 appscript 中基于 html 的对象抛出的格式错误的 html 错误
- java - 当奴隶尝试联系詹金斯时,詹金斯返回 403 禁止
- xml - 如何添加新的
- jsf - 如何使 CDI BeanManager 实例在 Wildfly 11.0 中可用?
- javascript - 在javascript的追加(输入)中使用onkeyup
- javascript - 如何处理不安全的 XMLHttpRequest 端点
- javascript - 如何从数据表中获取最后插入的行
- python-3.x - 由于未知原因,无法从网站上使用 python selenium binding 获取元素
- makefile - 避免 gnu make 自动删除文件