Почему я не могу явно вернуть void из метода? - PullRequest
55 голосов
/ 17 октября 2011
void run() {
    ...
    if (done) return cancel();
    ...
}

, где cancel() возврат void. Это не скомпилируется ... и я могу почти понять, почему. Но если я хочу вернуть пустоту из пустоты, почему бы и нет? Вместо этого я пишу что-то вроде этого:

if (done) {
    cancel();
    return;
}

Я не ищу предложений по стилю кода, я хочу знать, почему Java явно запрещает этот тип возврата void. Любая информация ценится, спасибо.

Ответы [ 14 ]

1 голос
/ 17 октября 2011

Интересная идея.Основной проблемой является спецификация языка, которая определяет оператор return как составленный из return <expression>.Метод void - это , а не выражение, поэтому конструкция недопустима.

Вы обнаружили, что можете реплицировать функциональность, выполнив метод void, а затем вернув его, так что нетреальная причина, чтобы это позволить.

1 голос
/ 17 октября 2011

void не тип.void в определении метода - просто заполнитель для ничего не возвращаемого.

1 голос
/ 17 октября 2011

Void не является реальным типом. Void - просто заполнитель, чтобы сделать синтаксис определения методов более согласованным. Это не Java-инновация; это унаследовано от C.

По этой причине компилятор не позволяет писать return cancel(), даже если метод cancel() равен void.

0 голосов
/ 19 октября 2011

Правильный способ справиться с этим будет:

void run() {
...
if (done) {
    cancel();
    return;
    }
...
}
...