我可以向现有 class 添加新的构造函数吗?

Can I add a new constructor to an existing class?

在 Scala 中,可以使用 implicit class 向对象添加新方法:

implicit class IntWithTimes(x: Int) {
  def times[A](f: => A): Unit = {
    def loop(current: Int): Unit =
      if(current > 0) {
        f
        loop(current - 1)
      }
    loop(x)
  }
}

是否有添加新构造函数的机制?无论是 new Int("1") 还是 Int("1") 或类似的东西。

通常答案是否定的。要将构造函数或 apply 添加到 TargetClass 方法,您应该控制 class TargetClass 或其同伴 object TargetClass 的来源必须在同一个文件中。

如果您的目标实际上是 Int,则可以使用以下 hack 使其工作:

object IntEx {
  def Int(s: String): Int = s.toInt
}

import IntEx._

val v: Int = Int("123")

这个 hack 之所以有效,是因为 Int 没有伴随对象,因此 Int 被解析为 IntEx.Int 方法。它不适用于任何 class 定义的伴生对象,包括任何 case class 因为它将在名称解析中优先。

仍然最重要的问题可能是为什么您希望它看起来像构造函数而不是显式工厂方法?我的意思是

到底出了什么问题
object IntEx {
  def intFromString(s: String): Int = s.toInt
}
val v2: Int = IntEx.intFromString("123")

object IntFromString {
  def apply(s: String): Int = s.toInt
}
val v3: Int = IntFromString("123")