В этом случае, вы не можете позвонить new Brian
в любое другое место вашего кода. Если вы удалите private
, то вы могли бы. Тогда класс Brian больше не будет одноэлементным (сопутствующий объект все еще будет одним) .
В любом случае, это не лучшийпример того, почему вам может понадобиться закрытый конструктор, поскольку никто не будет кодировать синглтон таким образом, у нас есть object
для этого.
Лучшим примером будет что-то вроде этого:
final case class Person private (name: String, age: Int)
object Person {
/** Returns None if the age is invalid, a Some with a new person otherwise. */
def apply(name: String, age: Int): Option[Person] =
if (age > 0 && age < 100) Some(new Person(name, age))
else None
}
Таким образом, вы можете быть уверены, что любой экземпляр Person имеет допустимый возраст.
Если конструктор будет открыт для общего доступа, это уже не так, потому что кто-то может сделать new Person("name", -1)
.