Поведение компиляции Java - PullRequest
2 голосов
/ 04 декабря 2011

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

private boolean fileExists(final File[] files, final String name) {
   if (files == null || files.length == 0) {
        return false;
    }
   for (final File file : files) {
        return true;
    }
    return false;  // why is this neessary?
}

Ответы [ 6 ]

3 голосов
/ 04 декабря 2011

Если files пусто, вы не входите в цикл, но функция должна вернуть boolean. Вот почему

1 голос
/ 04 декабря 2011

Поскольку вы объявили, что метод возвращает логическое значение

private boolean fileExists(final File[] files, final String name)

Если вы не хотите, чтобы он что-либо возвращал, объявите метод как 'void'

private void fileExists(final File[] files, final String name)

Вы, вероятно, нуждаетесь в 'return', потому что, что произойдет, если оба утверждения 'if' ложны?

1 голос
/ 04 декабря 2011

Если files пусто (в конце концов, компилятор не знает), то ничего не будет возвращено.

1 голос
/ 04 декабря 2011

потому что files мог быть пустым.Метод должен возвращать логическое значение во всех случаях, определенных в сигнатуре!

1 голос
/ 04 декабря 2011

Потому что, что будет, если files пусто?

Вам понадобится второй оператор возврата для этого случая.

0 голосов
/ 04 декабря 2011

Если return внутри if и for не выполнены, нам все равно необходимо вернуть значение. Поэтому требуется return заявление.

Глядя на код, мы видим, что будет возвращено либо возвращение в if, либо в for, но компилятор не может сделать это вывод.

...