В ожидании пользовательского ввода внутри конструктора - PullRequest
0 голосов
/ 27 апреля 2018

Я думал о том, насколько плоха такая практика, когда вы делаете это:

SomeConstructor(){
 Scanner sc = new Scanner(System.in);
 a = sc.nextInt();
}

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

1 Ответ

0 голосов
/ 27 апреля 2018

Просто: действительно плохо.

Основная цель конструктора - конечно, инициализировать вновь созданный объект. Но: вы очень предпочитаете передавать значения.

Значение: если у вас есть конструктор, считанный из стандартного in, это делает почти невозможным простое модульное тестирование соответствующего класса!

Вы хотите следовать принципу единой ответственности . Как: один класс отвечает за сбор информации. Другой класс отвечает за обработку этого ввода. Ваш подход приведет к классу, который сначала выбирает значения, а затем работает с ними. И как сказано: ты хочешь избежать этого.

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