Быстрый вопрос по Java:Создание экземпляра данного класса только из другого?
-
03-07-2019 - |
Вопрос
Таким образом, моя проблема заключается в следующем:Мне нужен способ гарантировать, что только один данный класс может создавать экземпляр другого.Я не хочу делать другой вложенный внутренний класс или что-то в этом роде.Как мне это сделать?Я навскидку забываю.
Решение
Сделайте конструктор приватным.Создайте статический фабричный метод, который принимает экземпляр класса, к которому разрешен доступ.Попросите фабричный метод создать подходящий объект и использовать параметр settor для объекта, которому разрешен доступ к созданному объекту, чтобы предоставить этому классу созданную копию.
public class AllowedAccess
{
private SecureClass secure;
public setSecureClass( SecureClass secure )
{
this.secure = secure;
}
...
}
public class SecureClass
{
private SecureClass() {}
public static void Create( AllowedAccess allowed )
{
allowed.setSecureClass( new SecureClass() );
}
...
}
Кстати, я с подозрением отношусь к этому дизайну.Мне кажется, что они слишком тесно связаны.
Другие советы
Частный статический внутренний класс - это именно то, что вам нужно.В этом нет ничего глупого.
public class Creator {
private static class Created {
}
}
В противном случае вы можете защитить создание экземпляра только на уровне пакета.
public class Created {
Created() {
}
}
Который предоставляет доступ к конструктору только классам из одного и того же пакета.
Вы могли бы сделать класс, который должен быть защищен от пакета создания экземпляра, закрытым.
Я согласен с ответом тванфоссона, а также с его комментарием о слишком высокой связи.Почему бы вам не сохранить больший контроль над процессом создания вашего класса, приняв Инверсия управления фреймворк, подобный Весна или Угадай?
ИМХО, следует немного подумать о создании классов с помощью оператора "new"...устаревшие, следует отдавать предпочтение фабрикам, а фреймворки IoC - еще больше.
С уважением