Можем ли мы остановить запуск конструктора? - PullRequest
8 голосов
/ 09 марта 2011

Мне нужно создать объект какого-то типа.Класс объекта имеет только один конструктор (тот, который я написал).

Моя программа получает запросы на создание экземпляров объектов с идентификатором параметра.Я хочу остановить конструктор, если параметр ID содержит символ, который не является цифрой.

Я не могу проверить параметр раньше, так как я не тот, кто вызывает конструктор.

Ответы [ 3 ]

20 голосов
/ 09 марта 2011

Сделайте конструктор закрытым и предоставьте статический метод фабрики, который проверит и вернет новый экземпляр объекта, если параметр допустим.

6 голосов
/ 09 марта 2011

Единственный способ «остановить» конструктор - вызвать исключение. Имея в виду, конечно, что вызывающая сторона должна «знать» об этом исключении и иметь возможность обрабатывать случай, когда конструктор терпит неудачу.

Создание исключения из конструктора не останавливает создание объекта, а просто приводит к тому, что присвоение ссылки на переменную не выполняется, а ссылка недоступна (и, следовательно, подходит для сборки мусора) , если вы делаете ошибку, передавая this внешнему методу из самого конструктора. (Что вы не должны делать в любом случае.)

4 голосов
/ 09 марта 2011

Как решить эту проблему, зависит от того, что вы хотите сделать, когда задан недопустимый символ, что, в свою очередь, зависит от того, о каком объекте мы говорим, и от того, как библиотека-потребитель использует его.

Самое разумное, что можно сделать, это бросить IllegalArgumentException, и это то, что я бы посоветовал вам сделать.

Однако, возможно, имеет смысл просто return null, хотя я настоятельно рекомендую против этого (вы не можете сделать это непосредственно в конструкторе, но вы можете создать метод фабрики, который делает это).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...