costruttore di sovraccarico per classi case di Scala?
-
18-09-2019 - |
Domanda
In Scala 2.8 è c'è un modo per sovraccaricare costruttori di una classe case?
Se sì, si prega di mettere un frammento di spiegare, in caso contrario, si prega di spiegare perché?
Soluzione
Il sovraccarico costruttori non è speciale per le classi di caso:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Tuttavia, come si può sovraccaricare anche il metodo apply
nell'oggetto compagno, che viene chiamato quando si omette new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
In Scala 2.8, nome e parametri di default può essere spesso utilizzato al posto di sovraccarico.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
Altri suggerimenti
È possibile definire un costruttore di overload come al solito, ma per invocarlo è necessario utilizzare la "nuova" parola chiave.
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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow