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é?

¿Fue útil?

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
scroll top