Используйте ключевое слово new
, если хотите сослаться на собственный конструктор class
:
class Foo { }
val f = new Foo
Пропустить new
, если вы ссылаетесь на метод apply
объекта-компаньона:
class Foo { }
object Foo {
def apply() = new Foo
}
// Both of these are legal
val f = Foo()
val f2 = new Foo
Если вы создали класс кейса:
case class Foo()
Scala тайно создает объект-компаньон для вас, превращая его в:
class Foo { }
object Foo {
def apply() = new Foo
}
Таким образом, вы можете сделать
f = Foo()
Наконец, имейте в виду, что нет правила, которое говорит, что метод компаньона apply
должен быть прокси для конструктора:
class Foo { }
object Foo {
def apply() = 7
}
// These do different things
> println(new Foo)
test@5c79cc94
> println(Foo())
7
И, поскольку вы упомянули классы Java: да - классы Java редко имеют сопутствующие объекты с методом apply
, поэтому вы должны использовать new
и конструктор фактического класса.