在 Scala 中,如何使用多个构造函数子类化 Java 类?

2024-04-23

假设我有一个带有多个构造函数的 Java 类:

class Base {
    Base(int arg1) {...};
    Base(String arg2) {...};
    Base(double arg3) {...};
}

如何在 Scala 中扩展它并仍然提供对 Base 的所有三个构造函数的访问?在 Scala 中,子类只能调用其超类的构造函数之一。我该如何解决这个规则?

假设 Java 类是我无法更改的遗留代码。


人们很容易忘记特征可以扩展类。如果您使用特征,您可以推迟决定调用哪个构造函数,如下所示:

trait Extended extends Base {
  ...
}

object Extended {
  def apply(arg1: Int) = new Base(arg1) with Extended
  def apply(arg2: String) = new Base(arg2) with Extended
  def apply(arg3: Double) = new Base(arg3) with Extended
}

Scala 2 特征本身可能没有构造函数参数,但您可以通过使用抽象成员来解决这个问题。

(Scala 3 允许特征具有构造函数参数。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Scala 中,如何使用多个构造函数子类化 Java 类? 的相关文章

随机推荐