Возвращаемый тип Boolean в Java - PullRequest
       42

Возвращаемый тип Boolean в Java

2 голосов
/ 15 февраля 2010

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

Пример кода 1

boolean flag = sampleMethod();

public boolean samplemethod(){
    return false;
}

Пример кода 2

sampleMethod();

public boolean samplemethod(){
    return false; 
}

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

Ответы [ 3 ]

11 голосов
/ 15 февраля 2010

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

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

4 голосов
/ 15 февраля 2010

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

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

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

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

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

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

0 голосов
/ 15 февраля 2010

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

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

sampleMethod(); // Now generates a warning
...