Pergunta

Em Scala 2,8 existe uma maneira de construtores de sobrecarga de uma classe caso?

Se sim, por favor, coloque um trecho de explicar, se não, por favor, explique por quê?

Foi útil?

Solução

A sobrecarga construtores não é especial para as classes de caso:

case class Foo(bar: Int, baz: Int) {
  def this(bar: Int) = this(bar, 0)
}

new Foo(1, 2)
new Foo(1)

No entanto, você pode gostar de também sobrecarregar o método apply no objeto companheiro, que é chamado quando você omitir new.

object Foo {
  def apply(bar: Int) = new Foo(bar)
}

Foo(1, 2)
Foo(1)

Em Scala 2.8, com o nome e parâmetros padrão muitas vezes pode ser usado em vez de sobrecarregar.

case class Baz(bar: Int, baz: Int = 0)
new Baz(1)
Baz(1)

Outras dicas

Você pode definir um construtor sobrecarregado da maneira usual, mas para invocá-lo você tem que usar a "nova" palavra-chave.

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top