Email or username:

Password:

Forgot your password?
Top-level
nonsense :twittercheck:

@kurator88 Сейчас, если у тебя класс унаследован, то у него в конструкторе первая строчка ВСЕГДА должна вызвать конструктор предка (super()). Скоро это будет не обязательно.

7 comments
kurator88

@nonsense это я понимаю. Я немного писал на java(лет 5 или 6).

Не понятен просто профит. Ведь этот if можно и снаружи конструктора сделать

nonsense :twittercheck:

@kurator88 так в примере нужно именно в конструкторе проверить. Не, конечно можно написать метод статический и в первой строчке наколхозить чтото типа super(validateValue());

А рядом метод

private static long validateValue() {
if (value < 0) {
throw new IllegalArgumentException();
}
return value;
}

Но это полная фигня и это неудобство будет расти в геометрической прогрессии если у тебя несколько конструкторов и несколько параметров.

kurator88

@nonsense ты проверяешь значение внутри конструктора а можно проверять снаружи

if (value < 0 ) {
throw ....
}
new Object(value)
_______
Возможно это не так удобно конечно.
Микрофикс не осуждаю но и не считаю что он всю мою жизнь изменит

nonsense :twittercheck:

@kurator88 да ну ты чё 😄 а как же инкапсуляция?

nonsense :twittercheck:

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

kurator88

@nonsense так весь плюс в том что мы выбросили ошибку раньше чем сработал if. По факту просто экономим время на вызове super()

fa11_1eaf

@nonsense @kurator88
Плюсовик в треде. Поясните, плес, зачем вообще тогда было писать super(), если конструктор в любом случае с него начинается?
Или в потомках можно определить полностью кастомный конструктор без вызова родительского?

Go Up