construtor sobrecarga para as Classes de casos de Scala?
-
18-09-2019 - |
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ê?
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