2010-02-15 3 views
2

У меня есть вопрос о типах возвратов boolean. Проверьте следующий код:Тип возврата Boolean в Java

Код Пример 1

boolean flag = sampleMethod(); 

public boolean samplemethod(){ 
    return false; 
} 

Пример кода 2

sampleMethod(); 

public boolean samplemethod(){ 
    return false; 
} 

В приведенных выше двух примерах, код компилируется правильно без какого-либо времени компиляции или запуска исключений времени. Я сомневаюсь, что Java не делает обязательным для возвращаемого типа boolean в вызывающей программе, где для других типов данных программа не работает. Не могли бы вы объяснить мне причину этого?

+2

первый, вышеуказанный код не компилируется. И, во-вторых, это поведение одинаково для всех типов. – Bozho

+0

Для повышения удобочитаемости используйте тег 'code'. И, возможно, вы должны скомпилировать код, прежде чем публиковать его ... поскольку Java - это случай, который он не будет компилировать. – Arne

+0

Пожалуйста, напишите рабочий код, а не код «что-то вроде этого». –

ответ

5

Как говорит @DR, Java не заставляет вас назначать результат вызова метода. Вызов метода void или non-void действителен как полный оператор в Java.

Я бы предположить, что причины Java разработан таким образом, включают в себя следующее:

  • Удобство: большинство разработчиков найдет это неудобство, если результат каждого непусто вызова метода должен быть назначен.

  • Традиция: C, C++ и почти никакой другой язык заставляют вас это делать. (У меня смутные воспоминания о каком-то языке, который был ... но это было давно.)

  • Бесполезность: вы не можете запретить разработчику присваивать результат временной переменной, а затем игнорировать ее. Или написать метод обертки, который делает то же самое.

  • Лучшие альтернативы: если вы хотите, чтобы разработчик обратил внимание на ошибку в Java, выкиньте соответствующее проверенное исключение.

11

Java never заставляет вас назначить возвращаемое значение вызова функции. Там должен быть что-то не так с вашим другим кода (вы можете разместить его здесь, тоже)

PS: Это напоминает мне о старом добром Turbo Pascal, где вы должны были включить расширенный синтаксис, чтобы получить такое поведение.

+0

Я не фокусируюсь на том, компилируется он или нет, главный вопрос заключается в том, что вызывающая программа не обязательна для назначения возвращаемого логического значения из метода. – gmhk

+5

ответ был довольно ясным, что Java никогда не заставляет вас назначать возвращаемое значение. – Bozho

0

javac не может выдать предупреждение, если вы забыли присвоить результат переменной, но FindBugs может.

@CheckReturnValue(explanation="...") 
public boolean samplemethod(){ 
    return false; 
} 

sampleMethod(); // Now generates a warning 
+0

Это все еще не компилируется, если только 'sampleMethod();' вызывается изнутри фактической функции. В противном случае это рассматривается как незаконная функция _definition_ без набора возвращаемого типа. – Nyerguds

+1

@Nyerguds, конечно. Я предполагаю, что из контекста очевидно, что вызов 'sampleMethod();' находится где-то в другом методе. То же самое относится к образцу кода в вопросе. – finnw

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