constructor de sobrecarga para las clases de casos de Scala?
-
18-09-2019 - |
Pregunta
En Scala 2.8 es que hay una manera de sobrecargar constructores de una clase de caso?
En caso afirmativo, por favor, poner un fragmento de explicar, si no, por favor explique por qué?
Solución
La sobrecarga de constructores no es especial para las clases de casos:
case class Foo(bar: Int, baz: Int) {
def this(bar: Int) = this(bar, 0)
}
new Foo(1, 2)
new Foo(1)
Sin embargo, puede que quiera sobrecargar también el método apply
en el objeto acompañante, que se llama cuando se omite new
.
object Foo {
def apply(bar: Int) = new Foo(bar)
}
Foo(1, 2)
Foo(1)
En Scala 2,8, el nombre y los parámetros por defecto puede a menudo ser utilizado en lugar de la sobrecarga.
case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)
Otros consejos
Puede definir un constructor sobrecargado la forma habitual, pero para invocar que usted tiene que utilizar la "nueva" palabra clave.
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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow