Быстрый Java Вопрос: Создание одного класса только из другого? - PullRequest
4 голосов
/ 02 января 2009

Моя проблема такова: мне нужен способ гарантировать, что только один данный класс может создать экземпляр другого. Я не хочу делать другого вложенным внутренним классом или чем-то подобным. Как мне это сделать? Я забываю навскидку.

Ответы [ 4 ]

8 голосов
/ 02 января 2009

Частный статический внутренний класс - это именно то, что вам нужно. Ничего глупого в этом нет.

public class Creator {
  private static class Created {
  }
}

В противном случае вы можете защитить экземпляр только на уровне пакета.

public class Created {
  Created() {
  }
}

Который дает только классам из одного пакета доступ к конструктору.

1 голос
/ 02 января 2009

Сделайте конструктор приватным. Создайте статический метод фабрики, который принимает экземпляр класса, к которому разрешен доступ. Пусть фабричный метод создаст подходящий объект и использует 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() );
     }

     ...
}

Кстати, я с подозрением отношусь к этому дизайну. Кажется, слишком сильно связан со мной.

1 голос
/ 02 января 2009

Вы можете сделать класс, который должен быть защищен от пакета экземпляров, закрытым.

0 голосов
/ 02 января 2009

Я согласен с ответом tvanfosson, а также с его комментарием о слишком высокой связи. Почему бы вам не сохранить больше контроля над процессом создания вашего класса, приняв Инверсию Контроля , такую ​​как Spring или Guice ?

ИМХО создание классов с помощью оператора "new" следует считать немного ... устаревшим, фабрики предпочтительнее, а IoC-фреймворки еще более.

Привет

...