Use a new
palavra - chave quando quiser se referir ao class
próprio construtor de:
class Foo { }
val f = new Foo
Omita new
se você estiver se referindo ao apply
método do objeto complementar :
class Foo { }
object Foo {
def apply() = new Foo
}
// Both of these are legal
val f = Foo()
val f2 = new Foo
Se você fez uma aula de caso:
case class Foo()
Scala secretamente cria um objeto companheiro para você, transformando-o neste:
class Foo { }
object Foo {
def apply() = new Foo
}
Então você pode fazer
f = Foo()
Por último, lembre-se de que não há regra que diga que o apply
método complementar deve ser um proxy para o construtor:
class Foo { }
object Foo {
def apply() = 7
}
// These do different things
> println(new Foo)
test@5c79cc94
> println(Foo())
7
E, já que você mencionou as classes Java: sim - as classes Java raramente têm objetos companheiros com um apply
método, então você deve usar new
e o construtor da classe real.
De modo nenhum. Há dois casos gerais em que você omite
new
na escala. Com objetos singleton (que geralmente são usados para armazenar funções estáticas e como uma espécie de fábrica semelhante ao que você pode ver em java):Com classes de caso (na verdade, embaixo há classe + objeto = padrão companheiro , por exemplo, tendo classe e objeto com o mesmo nome):
Portanto, quando você trabalha com classes simples, as regras são as mesmas do Java.
Bônus, existe uma classe anônima em scala, que pode ser construída assim:
fonte
Com Scala 3 (que deve ser lançado em meados de 2020, oito anos depois), baseado em Dotty : nunca.
Scala 3 irá eliminar "
new
", como neste tópicofonte