Вопрос по java – Почему нет необходимости присваивать возвращаемое значение метода переменной? [Дубликат]

10

Possible Duplicate:
what happens to an object in Java if you do not reference it, like here : myString.concat(“that”)

public class ReturnTest
{
    public static void main(String[] args)
    {
        ReturnTest rt = new ReturnTest();
        rt.show();
    }

    public String show()
    {
        return "Hello";
    }
}

В приведенном выше кодеshow() метод возвращаетString значение, которое не фиксируется ни одной переменной. Ни компилятор, ни JVM не выдают никаких предупреждений, ошибок или исключений. То же самое верно для примитивных типов возврата. Зачем?

Разве компилятор не должен убедиться, что никакое важное значение, возвращаемое методом, не потеряно этим?

Как я могу это исправить из оболочки ??

Что делать, если вы присваиваете значение переменной, но не проверяете его? Что, если вы все же изучите его, но не сделаете «правильно»? решение, основанное на этом экзамене? Как далеко вы хотите это сделать, прежде чем компилятор выполнит команду & quot; right & quot; вещь? Damien_The_Unbeliever

Ваш Ответ

4   ответа
4

Потому что вам не обязательно нужно возвращаемое значение.

Error: User Rate Limit Exceeded WickeD
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
10

Это дизайн языка.

Во многих случаях методы возвращают значение, которое вас не волнует. НапримерStringBuilder.append() возвращает сам объект.

Это правда, что в некоторых случаях важное возвращаемое значение может быть потеряно. Например,InputStream.skip(long n) возвращает количество пропущенных байтов. А такжеread возвращает количество прочитанных байтов. Есть несколько инструментов (Checkstyle, FindBugs) которые обнаруживают такие ошибки. Но сам язык не требует проверки возвращаемого значения. И даже если бы это произошло, программа могла бы игнорировать значение.

Error: User Rate Limit Exceeded WickeD
Error: User Rate Limit Exceeded
3

Вы можете аннотировать метод с@CheckReturnValue если его возвращаемое значение всегда должно использоваться. Статический анализ кода, такой как FindBugs, учитывает эту аннотацию и выдает предупреждение, когда вы нарушаете ее.

По крайней мере, это очень разумно, когда метод возвращает какой-то объект, который требует окончательной обработки в конце, за который отвечает вызывающий объект. Это верно для ресурсов, которые должны быть закрыты в конце. Замки, которые должны быть освобождены в конце ...

1

В Java-функции не являются чистыми, поэтому они могут быть запущены только для побочных эффектов. Просто в этом случае нет побочных эффектов ...

public String show() {
    System.out.println("Hello");
    return "Hello";
}

Теперь вы хотите предупреждение? Компилятор не может знать, запускали ли вы его для побочного эффекта или значения, так зачем настаивать?

Похожие вопросы