Мне нужны два экземпляра, которые имеют доступ друг к другу рядовых. Я естественно думал о сопутствующем объекте, который предоставляет доступ к одному и только экземпляру этого класса-компаньона. сам класс я сделал частным, поэтому пользователи не могут просто создавать экземпляры с помощью new
.
object A {
def apply = dual
lazy val dual = new A
}
private class A {
//some irrelevant logic...
}
этот код не компилируется. я get: класс A избегает своей определяющей области как часть ошибки типа A, которую я действительно не понимаю. моим текущим обходным путем было определение черты с каждым объявлением метода, которое должен иметь класс, и сделать class A
расширением этой черты, в то время как двойным является тип признака, а не тип class A
.
Какую теоретическую проблему мне не хватает? почему этот запрет?