2012-11-05 3 views
-4
public MyObject method1() { 
    boolean someBoolean = true; 
    MyObject obj = ...; 

    if(!someBoolean) method1(); 
    else return obj; 
    // flow should never come to this statement, but compiler requires this return. why? 
    return null; 
} 

Почему компилятор java требует конечного оператора возврата?Зачем компилятору Java требуется возвращаемое значение?

-Prasanna

+5

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

+2

Вы ошибаетесь. Контроль действительно может дойти до того, что вы укажете. Не настоящий вопрос. – EJP

+0

Должен был опубликовать мой комментарий в качестве ответа ха-ха. –

ответ

7

Если !someBoolean, то method1 называется, но ничего не возвращается. Таким образом, поток полностью может закончиться этим последним утверждением.

4

Потому что, если ваше логическое значение неверно, вы ничего не возвращаете. Java требует, чтобы все методы возвращали свой соответствующий тип значений (в этом случае MyObject).

3

Вы должны изменить код:

public MyObject method1() { 
    boolean someBoolean = true; 
    MyObject obj = ...; 

    if(!someBoolean) return method1(); 
    else return obj; 
} 

Первоначально, ваше заявление, если ничего не вернуть, если !someBoolean, он просто называется method1() и игнорировали результат.

Смежные вопросы