通用 class 的伴随对象 |斯卡拉

Companion Object for Generic class | Scala

我正在使用 scala 2.13。 我正在尝试为代表 2D 点的通用 class 命名点创建伴生对象。 这是代码:

import scala.math.Numeric

class Point[T: Numeric](val x: T, val y: T) {
  import scala.math.Numeric.Implicits._

  private def getDistance(otherPoint: Point[T]): Double = {
    math.sqrt(math.pow((otherPoint.x - x).toDouble, 2) +
      math.pow((otherPoint.y - y).toDouble, 2))
  }
  override def toString = "(" + x + "," + y + ")"
}

object Point[T: Numeric] {
  def isWithinDistance(otherPoint: Point[T], distance: Double): Boolean = {
    return getDistance(otherPoint) <= distance
  }
}

但是在我定义伴生对象的第 13 行,我给出了类似于 class Point 的类型参数,但我得到以下错误: ';'预期但找到“[”。 click Here to see the location of the error

我们如何为泛型 classes 创建伴生对象,以及我们如何使用伴生对象访问在其他一些驱动程序中的 class 中定义的方法?

你不能参数化一个对象,更重要的是,你不需要:) 对象是单例,它们的目的是捕获整个类型共有的东西,并且独立于具体实例(这就是为什么你的函数还需要 two Point 参数,而不是一个) .

    object Point { 
        def isWithinDistance[T : Numeric](
          point: Point[T], 
          otherPoint: Point[T], 
          distance: Double
        ) = point.getDistance(otherPoint) <= distance
    }

附带说明一下,我看不出有任何理由将此函数放在伴随对象上。它应该是一个常规的 class 方法。