constructeur de surcharge pour les classes de cas de Scala?
-
18-09-2019 - |
Question
Scala 2.8 est-il un moyen de surcharger les constructeurs d'une classe de cas?
Si oui, s'il vous plaît mettre un extrait pour expliquer, sinon, s'il vous plaît expliquer pourquoi?
La solution
Surcharger les constructeurs ne sont pas particulièrement pour les classes de cas:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Cependant, vous pouvez vous aussi surcharger la méthode apply
dans l'objet compagnon, qui est appelée lorsque vous omettez new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
Dans Scala 2.8, le nom et les paramètres par défaut peuvent souvent être utilisées au lieu de surcharger.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
Autres conseils
Vous pouvez définir un constructeur surchargé de la manière habituelle, mais pour l'invoquer, vous devez utiliser le mot-clé « nouveau ».
scala> case class A(i: Int) { def this(s: String) = this(s.toInt) }
defined class A
scala> A(1)
res0: A = A(1)
scala> A("2")
<console>:8: error: type mismatch;
found : java.lang.String("2")
required: Int
A("2")
^
scala> new A("2")
res2: A = A(2)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow